Именование классов
От: Аноним  
Дата: 20.05.11 12:54
Оценка:
Добрый день, подскажите плиз материалы где бы была информация (или посоветуйте какие-то свои идеи), о том, как именовать классы, чтобы было в целом понятно что и где искать? Про entity и DAC/DAL все понятно... а как насчет остального?
Re: Именование классов
От: pagrus  
Дата: 21.05.11 21:31
Оценка:
А>Добрый день, подскажите плиз материалы где бы была информация (или посоветуйте какие-то свои идеи), о том, как именовать классы, чтобы было в целом понятно что и где искать? Про entity и DAC/DAL все понятно... а как насчет остального?

Я не встречал стандартныъ рекомендаций, по крайней мере ничего, что было бы направлено на упрощение понимания. Обычно достаточно, чтобы имя класса отражало его назначение. И при вменяемой декомпозиции именование не будет проблемой.
Re[2]: Именование классов
От: Аноним  
Дата: 24.05.11 13:03
Оценка:
Здравствуйте, pagrus, Вы писали:

А>>Добрый день, подскажите плиз материалы где бы была информация (или посоветуйте какие-то свои идеи), о том, как именовать классы, чтобы было в целом понятно что и где искать? Про entity и DAC/DAL все понятно... а как насчет остального?


P>Я не встречал стандартныъ рекомендаций, по крайней мере ничего, что было бы направлено на упрощение понимания. Обычно достаточно, чтобы имя класса отражало его назначение. И при вменяемой декомпозиции именование не будет проблемой.


А может вы встречали обсуждения какие классы именовать например xxxFacade или xxxHelper или xxxWorker ?
Re[3]: Именование классов
От: Lloyd Россия  
Дата: 24.05.11 13:11
Оценка: 1 (1) :)
Здравствуйте, Аноним, Вы писали:

А>А может вы встречали обсуждения какие классы именовать например xxxFacade или xxxHelper или xxxWorker ?


Прицынп простой: фасады именуем xxxFacade, хелперы — xxxHelper, воркеры — xxxWorker.
Re[3]: Именование классов
От: -VaS- Россия vaskir.blogspot.com
Дата: 24.05.11 18:08
Оценка: +2
А>А может вы встречали обсуждения какие классы именовать например xxxFacade или xxxHelper или xxxWorker ?

Надо стараться не включать в имена типов и методов общие, ни о чем не говорящие слова, а также названия когда-то примененных паттернов (OrdersManager, QuickSortStrategy, TheThirdTabPresenter, MainView, Worker.DoStuff(), MainProcessor.ProcessNext(), CustomerRepository.Get() и тому подобный бред). Если никак не получается придумать хорошее имя — на 98% перед нами god-тип.
Re[4]: Именование классов
От: Kalina9001  
Дата: 25.05.11 09:58
Оценка: +1
Здравствуйте, -VaS-, Вы писали:
VS>Надо стараться не включать в имена типов и методов общие, ни о чем не говорящие слова, а также названия когда-то примененных паттернов (OrdersManager, QuickSortStrategy, TheThirdTabPresenter, MainView, Worker.DoStuff(), MainProcessor.ProcessNext(), CustomerRepository.Get() и тому подобный бред). Если никак не получается придумать хорошее имя — на 98% перед нами god-тип.

Хм... Почему?

Person
PersonView
PersonComparer
PersonRepository
PersonTypeConverter
PersonTypeEditor

ИМХО удобно, из названия сразу следует что и как
... << RSDN@Home 1.2.0 alpha 5 rev. 1497>>
Re: Именование классов
От: Nuseraro Россия  
Дата: 27.05.11 05:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день, подскажите плиз материалы где бы была информация (или посоветуйте какие-то свои идеи), о том, как именовать классы, чтобы было в целом понятно что и где искать? Про entity и DAC/DAL все понятно... а как насчет остального?


В вопросе наименований классов, методов, переменных и т.д. как-то мало правил, много творчества. Класс должен иметь единое назначение, собственно пишете это назначение в названии. Если назначение трудно выразить или оно не одно, значит что-то не то. Чтобы понять как лучше коротко выразить назначение: напишите комментарий к классу, как бы вы ответили на вопрос коллеги "Для чего нужен этот класс", обычно это несколько строчек. Посмотрите на получившееся, оставьте 2, а если надо, то 3 слова.
Homo Guglens
Re: Именование классов
От: kvasya  
Дата: 27.05.11 09:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день, подскажите плиз материалы где бы была информация (или посоветуйте какие-то свои идеи), о том, как именовать классы, чтобы было в целом понятно что и где искать? Про entity и DAC/DAL все понятно... а как насчет остального?


Я бы порекомендовал тщательно изучить замечательный труд
Автор(ы): С. Макконнелл
Издательство: Питер
Цена: 577р.

Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, иллюстрирующих
С. Макконнелла.
codecomplete
Re[5]: Именование классов
От: -VaS- Россия vaskir.blogspot.com
Дата: 28.05.11 04:39
Оценка:
K>Person
K>PersonView
K>PersonComparer
K>PersonRepository
K>PersonTypeConverter
K>PersonTypeEditor

K>ИМХО удобно, из названия сразу следует что и как


Что касается подобных классов, то, в силу их процедурной природы и отсутствия какого-либо самостоятельного поведения (personFromLayer22 = _personTypeConvertor.Convert(personFromLayer21) — это не поведение класса, это процедура, одна из многих, сгруппированных в "класс"), именовать их иначе просто невозможно, да и не нужно — все это малоинтересный инфраструкрурный слой адаптеров.
Я же говорил про ООП и классы, образующие доменное поведение.
Re[2]: Именование классов
От: Аноним  
Дата: 30.05.11 05:52
Оценка:
Здравствуйте, Nuseraro, Вы писали:

N>В вопросе наименований классов, методов, переменных и т.д. как-то мало правил, много творчества. Класс должен иметь единое назначение, собственно пишете это назначение в названии. Если назначение трудно выразить или оно не одно, значит что-то не то. Чтобы понять как лучше коротко выразить назначение: напишите комментарий к классу, как бы вы ответили на вопрос коллеги "Для чего нужен этот класс", обычно это несколько строчек. Посмотрите на получившееся, оставьте 2, а если надо, то 3 слова.


Класс да... единое назначение, но аспектов сущности может быть тьма. Например по Person : DAC, хелперные методы для расширения Enumerable, бизнес правила (тут может быть еще полно аспектов), мапинг в json, хелперные методы для отображения на web формах, хелперные методы для выгрузки в файл на клиенте, если есть web service интерфейс то опять же могут появится аспекты...

А если таких сущностей с десяток (а реально это десятки) то никаких комментариев не начитаешься. А хуже всего из за отсутствия подхода к наименованию, "не сильно аккуратные" программисты валят вообще все аспекты в один класс. Потому собственно я и задался данным вопросом.

Мс например делает кое какие шаги в направлении снижения бардака. Например в mvc они перешли от "конфигурирования" к стандартам наименования, что имхо очень грамотно.
Re: Именование классов
От: diez_p  
Дата: 01.06.11 10:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день, подскажите плиз материалы где бы была информация (или посоветуйте какие-то свои идеи), о том, как именовать классы, чтобы было в целом понятно что и где искать? Про entity и DAC/DAL все понятно... а как насчет остального?


Имя должно отражать, назначение класса исходя из принципа единой ответственности. Тип как правило совершает какие-то действия над какими-то сущностями или абстракциями, вот из этого и надо исходить и стараться именовать СущностьДействие.
Re[2]: Именование классов
От: Аноним  
Дата: 02.06.11 09:51
Оценка:
Здравствуйте, diez_p, Вы писали:

_>Имя должно отражать, назначение класса исходя из принципа единой ответственности. Тип как правило совершает какие-то действия над какими-то сущностями или абстракциями, вот из этого и надо исходить и стараться именовать СущностьДействие.


Спасибо, интересно... Но еще есть entity классы не совершают действий и таких классов на одну бизнес сущность может быть несколько (доменный обьект, json, Db entity, win service entity) может подскажете как их именовать?
Re[3]: Именование классов
От: diez_p  
Дата: 02.06.11 10:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, diez_p, Вы писали:


_>>Имя должно отражать, назначение класса исходя из принципа единой ответственности. Тип как правило совершает какие-то действия над какими-то сущностями или абстракциями, вот из этого и надо исходить и стараться именовать СущностьДействие.


А>Спасибо, интересно... Но еще есть entity классы не совершают действий и таких классов на одну бизнес сущность может быть несколько (доменный обьект, json, Db entity, win service entity) может подскажете как их именовать?

У меня таких ситуаций не было. Но тут, как всегда есть компромисс, касаемо в .NET одинаковые имена классов можно разрулить вот так
допустим 2 пространства имен:
Web.Presenter.JSON
Web.Data.Entity
в каждом есть по Person
using Ui=Web.Presenter.JSON;
using Dal=Web.Data.Entity;

// использование 
Ui.Person uiPerson = new Ui.Person();
Dal.Person dalPerson = new Dal.Person();

Если же такое перекрытие повсеместно, то я бы наиболее широко используемую абстракцию обозначил как Person, а остальное PersonUiData или PersonDalData, имена не нравятся, но в голову ничего лучше не пришло.
Re[3]: Именование классов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.06.11 17:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, diez_p, Вы писали:


_>>Имя должно отражать, назначение класса исходя из принципа единой ответственности. Тип как правило совершает какие-то действия над какими-то сущностями или абстракциями, вот из этого и надо исходить и стараться именовать СущностьДействие.


А>Спасибо, интересно... Но еще есть entity классы не совершают действий и таких классов на одну бизнес сущность может быть несколько (доменный обьект, json, Db entity, win service entity) может подскажете как их именовать?


Не должно быть таких классов. Если у вас Person достается из баз, то он же должен сериализоваться в JSON для передачи по сети. А еще лучше настраивать маппинг на БД с помощью expression tree, чтобы компилятор проверял правильность замапенных полей.
Re[4]: Именование классов
От: Аноним  
Дата: 03.06.11 06:03
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Не должно быть таких классов. Если у вас Person достается из баз, то он же должен сериализоваться в JSON для передачи по сети. А еще лучше настраивать маппинг на БД с помощью expression tree, чтобы компилятор проверял правильность замапенных полей.


Как мне кажется данный подход серьезно нарушает "Single responsibility", к тому же он никак не решает проблемы с доменными обьектами, win service entity и различными entity которые возникают в бизнес слое.

Для json конечно есть привлекательный (и иногда годный) выход — вынести код в отдельный класс serializer/deserializer (т.к. на выходе/входе строка). Но на практике композиция объектов из бд не всегда тождественна композиции объектов json для отправки на клиент.
Re[5]: Именование классов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 03.06.11 06:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, gandjustas, Вы писали:


G>>Не должно быть таких классов. Если у вас Person достается из баз, то он же должен сериализоваться в JSON для передачи по сети. А еще лучше настраивать маппинг на БД с помощью expression tree, чтобы компилятор проверял правильность замапенных полей.


А>Как мне кажется данный подход серьезно нарушает "Single responsibility"

Каким образом? Сериализация, маппинг и BL не находятся в классе Person, там находятся только данные. SRP не нарушишь никак.

А>к тому же он никак не решает проблемы с доменными обьектами, win service entity и различными entity которые возникают в бизнес слое.

Ну и пусть возникают. Есть person, который достается из базы и может быть в нее сохранен, есть PersonWithOrders для отображения, который также достается из базы (но уже не сохраняется), оба сериализуются в JSON внешним сериализатором.

А>Для json конечно есть привлекательный (и иногда годный) выход — вынести код в отдельный класс serializer/deserializer (т.к. на выходе/входе строка).

Так и нужно делать, иначе ты нарушаешь SRP.

А>Но на практике композиция объектов из бд не всегда тождественна композиции объектов json для отправки на клиент.

А сделать гибкий маппинг, как для БД — не судьба? Или использовать классы вроде PersonWithOrders ?
Re[3]: Именование классов
От: pagrus  
Дата: 04.06.11 10:49
Оценка:
А>А может вы встречали обсуждения какие классы именовать например xxxFacade или xxxHelper или xxxWorker ?

Увы, тоже нет, но здесь у меня есть пара косьвенных соображений.

* Если функции компонента выражаются через широко известный паттерн, лучше использовать его имя. Например, Facade — это хорошо описанный и известный паттерн.

Соответственно,
* Если функции компонента не выражаются через широко известный паттерн, лучше не использовать его имя.

* imho xxxHelper — это плохое имя. В мей практике такие компоненты появлялись, когда
— лень/нехватает квалификации провести декомпозицию
— но видно, что компонент перегружен функциями
— так вынесу-ка я из него функции наружу
— вынесу в "helper" — свалку для всего, что непонятно куда пристроить.


* Чтобы выбрать имя, имеет смысл сформулировать responsibility компонента. Например,
— xxx выполняет преобразование из X в Y
— xxx выставляет сервис X как веб-сервис
— xxx предлагает набор утилитных методов, предназначенных для X
— xxx реализует часть бизнес-логики: расчёт скидки для заказа
и т.д.
обычно это приводит к одному из двух вариантов
1. становится понятно, как назвать компонент
2. оказывается, что компонент делает слишком много всякого и непонятно что в целом. Тогда имеет смысл пересмотреть компоненты на предмет следования SRP. (этим путём идут Helper'ы)
3. выясняется, что проблема просто в английском — кратко перевести название. Тут лучше просто спросить кого-нибудь с хорошим знанием языка.

* Не стоит использвать несколько подходов к именованию в коде одного проекта. Лучше уж не сильно удачный, но один.

* Помогает, когда дизайн/архитектура хоть как-от задокументирована. Все смотрят на, скажем, sequence-диаграмму, и не только реадизуют, но и именуют компоненты как нарисовано.
Re[6]: Именование классов
От: Аноним  
Дата: 10.06.11 11:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Не должно быть таких классов. Если у вас Person достается из баз, то он же должен сериализоваться в JSON для передачи по сети. А еще лучше настраивать маппинг на БД с помощью expression tree, чтобы компилятор проверял правильность замапенных полей.


А>>Как мне кажется данный подход серьезно нарушает "Single responsibility"

G>Каким образом? Сериализация, маппинг и BL не находятся в классе Person, там находятся только данные. SRP не нарушишь никак.

Ну т.е. мы вернулись к изначальному вопросу — по какому принципу именовать кучу разных классов реализующих аспекты (и представления) сущности "Person".
Re[7]: Именование классов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.06.11 12:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, gandjustas, Вы писали:


G>>>>Не должно быть таких классов. Если у вас Person достается из баз, то он же должен сериализоваться в JSON для передачи по сети. А еще лучше настраивать маппинг на БД с помощью expression tree, чтобы компилятор проверял правильность замапенных полей.


А>>>Как мне кажется данный подход серьезно нарушает "Single responsibility"

G>>Каким образом? Сериализация, маппинг и BL не находятся в классе Person, там находятся только данные. SRP не нарушишь никак.

А>Ну т.е. мы вернулись к изначальному вопросу — по какому принципу именовать кучу разных классов реализующих аспекты (и представления) сущности "Person".


Сериализация делается обобщенными сериализаторами, доставание и сохранение в базе — ORM, логика живет в контроллере, который нужно будет именовать уже не от сущности, а если будет только crud, то можно также обобщенный алгоритм придумать. Если в контроллере повторяющиеся куски логики, то их вынести в отдельные методы и сгруппировать по смысловому признаку. Может быть какой-нибудь PersonManager появится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.