Соглашения о кодировании архитектуры Java - PullRequest
9 голосов
/ 05 января 2010

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

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

  • помощник "класса"
  • утилита "класс"
  • фабрика "класс"
  • "класс" менеджер
  • простой "класс"
  • по умолчанию "класс"
  • мой "класс"

Ответы [ 7 ]

5 голосов
/ 05 января 2010

Для меня:

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

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

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

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

  • Простой и По умолчанию часто означает просто базовый класс.

  • A Мой «класс», как правило, предназначен для предварительных проверок идей и примеров кода, хотя иногда он используется в производственном коде, например, для MyApplication и MyView (по сути, для именования синглетонов).

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

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

EDIT

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

  • Официальная заглушка входа / выхода / обработки процесса
  • (одноэлементный) объект приложения (ссылается на иерархическую модель данных и, возможно, объекты задачи)
  • Менеджер баз данных
  • Сетевой менеджер
  • Пользовательский интерфейс (который ссылается или не ссылается на модель представления в зависимости от ваших религиозных убеждений)
  • Помощник / Утилиты / Фабричные классы
  • Код клея Разное
  • Вспомогательные файлы

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

EDIT

Я использую синглтон, наименьший вес, составной, итератор, сувенир, наблюдатель, состояние, стратегию как рутину. Я использую фасад, прокси, цепочку ответственности между модулями и в коде пользовательского интерфейса. Я иногда использую фабрику, прототип и конструктор в сложных системах данных, а также шаблон и посетителя, когда система концептуально особенно сложна. Я иногда использую адаптер, мост, фабрику, абстрактную фабрику, декоратор, когда поведение сложное. Я редко использую Interpreter и использую медиатор, чтобы помочь мне написать более общий код в некоторых случаях. Лично я не люблю называть свои классы в честь GoF, но многие люди очень рады, это может быть хорошей идеей, и я не против практики. Это может быть очень полезно, и если оно делает людей счастливыми и помогает понять всем, что происходит в конкретном случае, тогда это здорово.

Мне просто кажется, что называть объект моего приложения Singleton, Composite или ChainOfResponsibilityLink (?) Не очень хорошо, а вызывать мои адаптеры кода сети и базы данных - не очень хорошо, поэтому я называю их менеджерами. И я называю многие вещи, которые, возможно, следует называть «Фасады» в «GoF», «Помощники» или «Утилиты», потому что я думаю, что это более понятно, что имеется в виду.

4 голосов
/ 05 января 2010

Как правило, вы встречаете множество этих терминов, но официальных стандартов на это нет. Я бы сказал, что некоторые из них - плохие практики. Часто классы «помощник» и «менеджер» являются классами, которые делают слишком много и являются ловушкой для поведения, которое должно быть в другом месте.

2 голосов
/ 05 января 2010

Если честно, я не уверен, что вы подразумеваете под большинством этих терминов. Если вы говорите о шаблонах проектирования, то я считаю, что в книге «Банды четырех» ( Шаблоны проектирования ) есть схемы каждого из шаблонов, которые они используют. Если вы говорите о чем-то другом, возможно, вы слишком усложняете вещи.

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

1 голос
/ 05 января 2010

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

0 голосов
/ 06 января 2010

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

0 голосов
/ 05 января 2010

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

0 голосов
/ 05 января 2010

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

...