Я работал в нескольких различных компаниях теперь, и у всех есть различные правила о том, как назвать классы и пакеты. У каждого из них есть различные макеты раскладки и рабочий процесс между классами. Через эти события я взял понимание как к расположению проект; однако, я хотел бы более конкретное определение как к расположению проект. Этот вопрос больше о uml, чем о соглашениях о присвоении имен.
То, что мне любопытно, - то, что является официальными определениями архитектуры относительно следующего (я видел помощников, используемых в качестве утилит и менеджеров, используемых в качестве помощников и т.д.).
]Для меня:[
] []Помощник - это фасад, или он кодирует/декодирует определенный формат данных и не имеет состояния между вызовами.[
][]Утилита предназначена для кодирования/декодирования формата или выполнения IO, и если он создает соединения, то часто не поддерживает соединения или держит файлы открытыми между вызовами.[
][]Менеджер похож на Помощника, но имеет состояние между вызовами. [
][]Factory - это класс, который получает или создает, а затем возвращает объект (либо пользовательский, либо API).[
][]Простой и Default часто означает просто базовый класс.[
][]A My "class" (Мой "класс") обычно используется для предполетных идей и примеров кода, хотя иногда он используется в производственном коде, например, для MyApplication и MyView (по сути, для именования синглонов).[
][]Эти имена классов являются де-факто именами. Это значения, которые я создаю и вижу чаще всего, но часто встречаются противоречивые схемы именования и несоответствия. Они не являются формальными именами шаблонов дизайна, и на практике выбор любого из этих имен кажется почти произвольным. Некоторые люди клеймят все свои классы, которые являются потокобезопасными, одним из этих имен и теми, которые не являются таковыми.[
] []Часто я также вижу, что имя "Менеджер" присваивается классу, который выполняет функцию, подобную ORM, с объектами или ключами, или объекту, который управляет соединениями в арбитражном порядке. [
] [][]EDIT[][
] []Я вижу приложение, которое построено на фреймворке, как обычно имеющее эти основные объекты: [
] []Я вижу, что сфокусированность на максимизации контролепригодности и минимизации площади поверхности этих интерфейсов более важна, чем именование пакетов и файлов; Я думаю, что вы должны следовать своему собственному носу для подробного описания поломки и именования вашего проекта. Разбиение кода на разные файлы для целей SCM особенно важно для разделяемых файлов, зависящих от более чем одной пули выше.[
] [][]EDIT[][
] []Я использую в повседневной работе одиночку, flyweight, composite, iterator, memento, наблюдателя, state, strategy. Я использую фасад, прокси, цепочку ответственности между модулями и в коде пользовательского интерфейса. Иногда я использую фабрику, прототип и конструктора в сложных информационных системах, а также шаблон и посетителя, когда система особенно сложна концептуально. Иногда я использую адаптер, мост, фабрику, абстрактную фабрику, декоратора, когда поведение является сложным. Я редко использую интерпретатор и использую медиатор, чтобы помочь мне написать более общий код в определенных случаях. Лично я не люблю называть свои классы в честь GoF, но многие очень рады, это может быть хорошей идеей и я не против практики. Это может быть очень полезно, и если это делает людей счастливыми, и это помогает всем понять, что происходит в конкретном случае, то это здорово.[
] []Я просто чувствую, что называть мой объект приложения Singleton, Composite или ChainOfResponsibilityLink (?) не очень хорошо, и что называть мою сеть и код базы данных адаптерами не очень хорошо, поэтому я называю их Менеджерами. И я называю много вещей, которые, возможно, следует называть фасадами в рамках GoF, Helpers или Utilities, потому что я думаю, что это более понятно.[
].] Обычно вы видите много таких терминов, но нет никаких официальных стандартов на этот счет. На самом деле, я бы сказал, что некоторые из них - плохая практика. Много раз классы "помощник" и "менеджер" - это классы, которые делают слишком много и являются ловушкой для поведения, которое должно быть где-то в другом месте.[
].] Честно говоря, я не уверен, что вы подразумеваете под большинством этих терминов. Если вы говорите о шаблонах дизайна, то я полагаю, что в книге "Банда четырех" ([]Design Patterns[]) есть диаграммы каждого из шаблонов, которые они используют. Если вы говорите о чём-то другом, вы, возможно, слишком усложняете ситуацию.[
] []Также, где бы вы ожидали получить "официальное" определение терминов, которые сами по себе не являются официальными?[
].] Не думаю, что вы найдете "официальные" определения этих терминов, потому что они означают разные вещи для разных людей. Имена могут быть трудными, потому что, хотя они, в конечном счете, произвольные, иметь имя, которое точно и лаконично описывает роль класса, является хорошей целью. Хорошим предложением является книга GoF Design Patterns. Вы также можете посмотреть Core J2EE Patterns, если вам нужно что-то более Java-ориентированное[
].] Из того, что я видел, компоновка пакетов проекта больше зависит от функциональности кода, а не от того, какой это тип класса (т.е. java.awt.image, java.awt.font вместо java.awt.utils, java.awt.singletons).[
].]На самом деле нет стандарта для именования пакетов и принятия решения о том, какие типы классов живут в этих пакетах. Всё это основано на ваших предпочтениях и на том, что для вас имеет смысл. Хотя в групповом окружении наименование пакетов и какие типы классов принадлежат в каждом пакете, как правило, решается на совещаниях по проектированию, где группа может прийти к решению, в основном, по обоюдному согласию. Или же вы можете просто работать на помешанного на контроле человека, который считает, что то, что он сделал по-своему, или нет, решают за вас.[
].] Я думаю, что любой класс, называемый FooManager, в лучшем случае сомнительно спроектирован в системе OO. Они, как правило, находятся в местах, где хранятся тонны состояний и множество глобальных переменных.[
].