Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> partial : хорошая или плохая вещь 
V
    Опции темы
jonie
Дата 9.4.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



как вы считаете хорошая или плохая идея M$ ввести понятие partial классов ?
я пока нашел очень большой (для меня) минус - объявление такого класса в разных файлах разное..
например :
Код

//это в первом файле
public partial class tempDataSet : global::System.Data.DataSet {..}

//это во втором файле
partial class tempDataSet....

//это в третем файле
public partial class tempDataSet:IEnumerable {...}

как "концы" -то искать?..или может есть какие "патентованные технологии"?)

Это сообщение отредактировал(а) jonie - 9.4.2008, 23:09


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
yar
Дата 9.4.2008, 23:43 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 8.9.2007
Где: Одесса, Украина

Репутация: нет
Всего: 8



Насколько мне известно, основная причина введения partial-классов и уже partial-методов состоит в упрощении взаимодействия со сгенерированным мастерами кодом. 
Не думаю, что разнесение класса по нескольким файлам в каком-либо другом случае имеет больше достоинств, нежели недостатков. Полагаю, если класс разрастается до такой степени, что ему тесно в своём файле, может быть лучше посмотреть, нельзя ли разбить его на несколько классов, чем "размазывать" один класс по нескольким файлам...
--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
DrunkProgrammer
Дата 10.4.2008, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 23.10.2007
Где: Омск

Репутация: 1
Всего: 1



Насколько я знаю partial используется при создании класса двумя или более разработчиками, чтобы они друг другу не мешали.
PM MAIL   Вверх
mr.DUDA
Дата 10.4.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



jonie, хоть класс и раскидан по разным файлам, перемещаться по методам, полям и свойствам можно так же как с обычным классом - в комбобоксе над редактором кода все они есть.

З.Ы. не всегда есть возможность разделить функциональность класса, иногда действительно удобнее по нескольким файлам раскидать - ту же форму например.


--------------------
user posted image
PM MAIL WWW   Вверх
jonie
Дата 10.4.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



DrunkProgrammer распиливание по файлам не поможет : например оба называют функции foo() ...
mr.DUDA оно, конечно, понятно... а вот как например узнать что из себя представляет класс? от чего наследован, какие интерфейсы реслизует ? каждый раз лазить в object explorer ?...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
tol05
Дата 10.4.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(jonie @  9.4.2008,  22:08 Найти цитируемый пост)
как вы считаете хорошая или плохая идея M$ ввести понятие partial классов ?

хорошая

Цитата(yar @  9.4.2008,  22:43 Найти цитируемый пост)
Не думаю, что разнесение класса по нескольким файлам в каком-либо другом случае имеет больше достоинств, нежели недостатков. Полагаю, если класс разрастается до такой степени, что ему тесно в своём файле, может быть лучше посмотреть, нельзя ли разбить его на несколько классов, чем "размазывать" один класс по нескольким файлам... 

Не согласен.
Разбивание класса на несколько классов - это "размазывание" прав и обязанностей этого класса. И далеко не всегда это допустимо и эффективно.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Gelis
Дата 10.4.2008, 15:04 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.10.2006
Где: Брест

Репутация: 2
Всего: 4



Цитата(DrunkProgrammer @  10.4.2008,  05:03 Найти цитируемый пост)
Насколько я знаю partial используется при создании класса двумя или более разработчиками, чтобы они друг другу не мешали.

Все нормальные люди для этих целей используют системы версионирования, например Subversion. Для разделения логики и представления данный метод тоже не подходит. Вижу лишь одно преимущество от использования партиал классов это отделение сгенерированного кода, от кода написанного разработчиком

Это сообщение отредактировал(а) Gelis - 10.4.2008, 15:09
PM MAIL   Вверх
jonie
Дата 10.4.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



а то что я выше написал? в разных местах класс объявляется по-разному... для меня это было мягко говоря шоком) учитывая как себя позиционирует c# (мол язык для недопуская ошибок, даже break ставить велит в switch)... вы считаете что partial помогает избегать ошибки?) лично я считаю что он их только плодит.

Цитата

Разбивание класса на несколько классов - это "размазывание" прав и обязанностей этого класса.
а раньше как-то жили вроде...да и merge никто не отменял даже в c#
tol05 чем она хороша, кроме как облегчение жизни для писателей всяческих визардов?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
source777
Дата 10.4.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(jonie @  10.4.2008,  22:28 Найти цитируемый пост)
чем она хороша, кроме как облегчение жизни для писателей всяческих визардов? 
одного этого достаточно, чтобы назвать мысль введения такой возможности хорошей! причём жизнь облегчается не столько писателям визардов, сколько тем, кто этими визардами пользуется...
Ключевое слово partial введено для поддержки инструментов кодогенерации и для других целей его просто напросто не надо использовать!!!
А сама идея - замечательная smile 


Это сообщение отредактировал(а) source777 - 10.4.2008, 23:32


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
jonie
Дата 10.4.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



можно было с легкостью заменить это на #autogeneratedregion  какой-нибудь.
не вижу сложностей с этим.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
archeg
Дата 10.4.2008, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Никогда не писал сам partial-классы и не собираюсь) Мое субъективное мнение что лучше делить класс на составные классы правильным образом, но не использовать партиал. Просто мне они не нравяться  smile 
Но без partial-классов дизайнер был бы неудобным, а WPF вообще бы не работал. Так что штука нужная, просто для специфичных вещей.


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
source777
Дата 11.4.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(jonie @  10.4.2008,  23:36 Найти цитируемый пост)
можно было с легкостью заменить это на #autogeneratedregion  какой-нибудь.
не вижу сложностей с этим. 
Нельзя, точнее можно(так было в .NET 1.x), но это будет гораздо менее эффективное решение, т.к. при перегенерации кода ты просто потеряешь свои изменения... 
+ почитай про частичные методы, такого ты никакими регионами ни за что не добьёшься....



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
tol05
Дата 11.4.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



1. спорить на тему хорошо или плохо мы жили раньше не буду smile
2. Мне partial классы нравятся. Считаю очень нужной фичей. Кто не хочет ее использовать - тот не использует. Те же слова в адрес "дробителей классов" smile
... я сначала начал думать над аргументами в защиту своей позиции,.. а потом просто набрал в гугле фразу "partial classes" и кликнул по  этой ссылке...
мне понравился такой аргумент автора
Цитата

One of the greatest benefits of partial classes is that it allows a clean separation of business logic and the user interface (in particular the code that is generated by the visual designer). Using partial classes, the UI code can be hidden from the developer, who usually has no need to access it anyway. Partial classes will also make debugging easier, as the code is partitioned into separate files.

Дальше искать не стал, но дополню, что частичные классы также позволяют разнести по отдельным файлам не только UI и business, но также и public class interface, private class interface, protected class interface, properties и т.д.и т.п. При этом дебагать и сопровождать эти "модули" становится проще,  апгрейдать их - безопаснее. Код читается легче и только тот, который нужен в данный момент.

Кроме того, введение частичных классов позволило (в частности в ASP.NET 2.0) убрать из страниц автогенерируемый код, который ИМХО занимал от 20 до 80 процентов всего кода aspx ...

Цитата

можно было с легкостью заменить это на #autogeneratedregion  какой-нибудь

в том-то и дело, что файлы были слишком засорены подобными конструкциями. Почему засорены? Да потому что ничего в таком коде менять нельзя, ни добавить, ни удалить... Так для каких целей такой код присутствовал в каждом файле? 

Это сообщение отредактировал(а) tol05 - 11.4.2008, 10:42


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
jonie
Дата 11.4.2008, 23:16 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата

позволяют разнести по отдельным файлам не только UI и business
есть модели для того специальные (например MVP, MVC...)... имхо это не решение
Цитата

 апгрейдать их - безопаснее.
ничем.
Цитата

в том-то и дело, что файлы были слишком засорены подобными конструкциями.
Да потому что ничего в таком коде менять нельзя, ни добавить, ни удалить...
в автогенерируемых частях тоже. строчка (учитывая сворачивание) имхо не была бы помехой.


лично меня как больше Сишника очееень смутило разное объявление в разных частях... меня это разочаровало...

не надо говорить что автогеренраторы лезут только в свои классы - сколько раз уже встречал баги например на TableAdaper.Fill() методов (по 2-3 раза подряд)...

в любом случае это холивар, так что стоит его перкратить - один фиг решать не нам )

Это сообщение отредактировал(а) jonie - 11.4.2008, 23:17


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1236 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.