Конвенции кодирования архитектуры Java

Я работал в нескольких различных компаниях теперь, и у всех есть различные правила о том, как назвать классы и пакеты. У каждого из них есть различные макеты раскладки и рабочий процесс между классами. Через эти события я взял понимание как к расположению проект; однако, я хотел бы более конкретное определение как к расположению проект. Этот вопрос больше о uml, чем о соглашениях о присвоении имен.

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

  • помощник "класса"
  • утилита "класса"
  • фабрика "класса"
  • менеджер "по классу"
  • простой "класс"
  • "класс" по умолчанию
  • мой "класс"
9
задан slimbo 5 January 2010 в 20:14
поделиться

7 ответов

[

]Для меня:[

] [
    ] [
  • ][

    ]Помощник - это фасад, или он кодирует/декодирует определенный формат данных и не имеет состояния между вызовами.[

    ][
  • ] [
  • ][

    ]Утилита предназначена для кодирования/декодирования формата или выполнения IO, и если он создает соединения, то часто не поддерживает соединения или держит файлы открытыми между вызовами.[

    ][
  • ] [
  • ][

    ]Менеджер похож на Помощника, но имеет состояние между вызовами. [

    ][
  • ] [
  • ][

    ]Factory - это класс, который получает или создает, а затем возвращает объект (либо пользовательский, либо API).[

    ][
  • ] [
  • ][

    ]Простой и Default часто означает просто базовый класс.[

    ][
  • ] [
  • ][

    ]A My "class" (Мой "класс") обычно используется для предполетных идей и примеров кода, хотя иногда он используется в производственном коде, например, для MyApplication и MyView (по сути, для именования синглонов).[

    ][
  • ] [
] [

]Эти имена классов являются де-факто именами. Это значения, которые я создаю и вижу чаще всего, но часто встречаются противоречивые схемы именования и несоответствия. Они не являются формальными именами шаблонов дизайна, и на практике выбор любого из этих имен кажется почти произвольным. Некоторые люди клеймят все свои классы, которые являются потокобезопасными, одним из этих имен и теми, которые не являются таковыми.[

] [

]Часто я также вижу, что имя "Менеджер" присваивается классу, который выполняет функцию, подобную ORM, с объектами или ключами, или объекту, который управляет соединениями в арбитражном порядке. [

] [

][]EDIT[][

] [

]Я вижу приложение, которое построено на фреймворке, как обычно имеющее эти основные объекты: [

] [
    ] [
  • ]Официальный вход/выход из процесса/события, обрабатывающие объект stub[
  • ] [
  • ]A (однотонный) приложение (ссылается на иерархическую модель данных и, возможно, на объекты задачи)[
  • ] [
  • ]Менеджер баз данных[
  • ] [
  • ]Сетевой менеджер[
  • ] [
  • ]UI (который ссылается или не ссылается на модель представления в зависимости от по вашему религиозному убеждению)[
  • ] [
  • ]Helper/Utility/Factory classes[
  • ] [
  • ]Miscript glue code[
  • ] [
  • ]Ancillary files[
  • ] [
] [

]Я вижу, что сфокусированность на максимизации контролепригодности и минимизации площади поверхности этих интерфейсов более важна, чем именование пакетов и файлов; Я думаю, что вы должны следовать своему собственному носу для подробного описания поломки и именования вашего проекта. Разбиение кода на разные файлы для целей SCM особенно важно для разделяемых файлов, зависящих от более чем одной пули выше.[

] [

][]EDIT[][

] [

]Я использую в повседневной работе одиночку, flyweight, composite, iterator, memento, наблюдателя, state, strategy. Я использую фасад, прокси, цепочку ответственности между модулями и в коде пользовательского интерфейса. Иногда я использую фабрику, прототип и конструктора в сложных информационных системах, а также шаблон и посетителя, когда система особенно сложна концептуально. Иногда я использую адаптер, мост, фабрику, абстрактную фабрику, декоратора, когда поведение является сложным. Я редко использую интерпретатор и использую медиатор, чтобы помочь мне написать более общий код в определенных случаях. Лично я не люблю называть свои классы в честь GoF, но многие очень рады, это может быть хорошей идеей и я не против практики. Это может быть очень полезно, и если это делает людей счастливыми, и это помогает всем понять, что происходит в конкретном случае, то это здорово.[

] [

]Я просто чувствую, что называть мой объект приложения Singleton, Composite или ChainOfResponsibilityLink (?) не очень хорошо, и что называть мою сеть и код базы данных адаптерами не очень хорошо, поэтому я называю их Менеджерами. И я называю много вещей, которые, возможно, следует называть фасадами в рамках GoF, Helpers или Utilities, потому что я думаю, что это более понятно.[

].
5
ответ дан 4 December 2019 в 19:34
поделиться
[

] Обычно вы видите много таких терминов, но нет никаких официальных стандартов на этот счет. На самом деле, я бы сказал, что некоторые из них - плохая практика. Много раз классы "помощник" и "менеджер" - это классы, которые делают слишком много и являются ловушкой для поведения, которое должно быть где-то в другом месте.[

].
4
ответ дан 4 December 2019 в 19:34
поделиться
[

] Честно говоря, я не уверен, что вы подразумеваете под большинством этих терминов. Если вы говорите о шаблонах дизайна, то я полагаю, что в книге "Банда четырех" ([]Design Patterns[]) есть диаграммы каждого из шаблонов, которые они используют. Если вы говорите о чём-то другом, вы, возможно, слишком усложняете ситуацию.[

] [

]Также, где бы вы ожидали получить "официальное" определение терминов, которые сами по себе не являются официальными?[

].
2
ответ дан 4 December 2019 в 19:34
поделиться
[

] Не думаю, что вы найдете "официальные" определения этих терминов, потому что они означают разные вещи для разных людей. Имена могут быть трудными, потому что, хотя они, в конечном счете, произвольные, иметь имя, которое точно и лаконично описывает роль класса, является хорошей целью. Хорошим предложением является книга GoF Design Patterns. Вы также можете посмотреть Core J2EE Patterns, если вам нужно что-то более Java-ориентированное[

].
1
ответ дан 4 December 2019 в 19:34
поделиться
[

] Из того, что я видел, компоновка пакетов проекта больше зависит от функциональности кода, а не от того, какой это тип класса (т.е. java.awt.image, java.awt.font вместо java.awt.utils, java.awt.singletons).[

].
0
ответ дан 4 December 2019 в 19:34
поделиться
[

]На самом деле нет стандарта для именования пакетов и принятия решения о том, какие типы классов живут в этих пакетах. Всё это основано на ваших предпочтениях и на том, что для вас имеет смысл. Хотя в групповом окружении наименование пакетов и какие типы классов принадлежат в каждом пакете, как правило, решается на совещаниях по проектированию, где группа может прийти к решению, в основном, по обоюдному согласию. Или же вы можете просто работать на помешанного на контроле человека, который считает, что то, что он сделал по-своему, или нет, решают за вас.[

].
0
ответ дан 4 December 2019 в 19:34
поделиться
[

] Я думаю, что любой класс, называемый FooManager, в лучшем случае сомнительно спроектирован в системе OO. Они, как правило, находятся в местах, где хранятся тонны состояний и множество глобальных переменных.[

].
0
ответ дан 4 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: