Я подумал об этом некоторое время назад, и он недавно появился, поскольку мой магазин делает свое первое реальное веб-приложение Java.
В качестве вступления я вижу две основные стратегии именования пакетов. (Чтобы быть ясным, я не имею в виду всю "domain.company.project" часть этого, я говорю о соглашении о пакете под этим.) Во всяком случае, соглашения об именах пакетов, которые я вижу, следующие:
-
Функциональность: присвоение ваших пакетов по их функциям по архитектуре, а не их идентификация в соответствии с бизнес-доменом. Другим термином для этого может быть именование в соответствии с "уровнем". Таким образом, у вас будет пакет *.ui и пакет *.domain и пакет *.orm. Ваши пакеты представляют собой горизонтальные срезы, а не вертикальные.
Это гораздо чаще, чем логическое именование. На самом деле, я не верю, что когда-либо видел или слышал о проекте, который делает это. Это, конечно, заставляет меня лелеять (вроде как думать, что вы придумали решение проблемы NP), поскольку я не ужасно умный, и я полагаю, у всех должны быть большие причины для этого, как они это делают. С другой стороны, я не против того, чтобы люди просто скучали по слону в комнате, и я никогда не слышал, чтобы был фактический аргумент за то, что он назвал так. Это просто стандарт де-факто.
-
Логическое: присвоение имен вашим пакетам в соответствии с их идентификатором бизнес-домена и размещение каждого класса, связанного с этим вертикальным фрагментом функциональности, в этот пакет.
Я никогда не видел и не слышал об этом, как я упоминал ранее, но для меня это имеет смысл.
-
Я склонен приближаться к системам вертикально, а не по горизонтали. Я хочу зайти и разработать систему обработки заказов, а не уровень доступа к данным. Очевидно, есть хороший шанс, что я коснусь уровня доступа к данным при разработке этой системы, но дело в том, что я не думаю об этом именно так. Разумеется, это означает, что, когда я получаю заказ на изменение или хочу реализовать какую-то новую функцию, было бы неплохо не ловить рыбу в кучу пакетов, чтобы найти все связанные классы. Вместо этого я просто смотрю в пакете X, потому что то, что я делаю, связано с X.
-
С точки зрения развития, я считаю это главной победой, чтобы ваши пакеты документировали ваш бизнес-домен, а не вашу архитектуру. Я чувствую, что домен почти всегда является частью системы, которую трудно найти, поскольку архитектура системы, особенно на данный момент, почти становится обыденной в ее реализации. Тот факт, что я могу прийти к системе с этим типом соглашения об именах и мгновенно от именования пакетов, знает, что он имеет дело с заказами, клиентами, предприятиями, продуктами и т.д., Кажется, очень удобен.
-
Похоже, это позволит вам значительно улучшить преимущества модификаторов доступа Java. Это позволяет вам гораздо более четко определять интерфейсы в подсистемах, а не в слоях системы. Поэтому, если у вас есть подсистема заказов, в которой вы хотите быть прозрачно стойкой, теоретически вы никогда не позволяете чему-либо еще знать, что она устойчива, не создавая публичные интерфейсы для своих классов персистентности на уровне dao и вместо этого упаковывая dao-класс в с только классами, с которыми он имеет дело. Очевидно, что если вы хотите раскрывать эту функциональность, вы можете предоставить ему интерфейс или сделать его общедоступным. Просто кажется, что вы потеряете много из этого, имея вертикальный срез ваших системных функций, разделенных на несколько пакетов.
-
Я полагаю, что один недостаток, который я могу видеть, заключается в том, что он немного усложняет процесс вырезания слоев. Вместо того, чтобы просто удалять или переименовывать пакет, а затем отбрасывать новый с помощью альтернативной технологии, вам нужно войти и изменить все классы во всех пакетах. Тем не менее, я не вижу, что это большое дело. Это может быть из-за отсутствия опыта, но я должен представить, что количество раз, когда вы меняете технологии, бледнеет по сравнению с количеством раз, когда вы входите, и редактируйте вертикальные фрагменты функции в вашей системе.
-
Итак, я думаю, что вопрос тогда выйдет вам, как вы называете свои пакеты и почему? Пожалуйста, поймите, что я не обязательно думаю, что я наткнулся на золотого гуся или что-то здесь. Я новичок во всем этом, имея в основном академический опыт. Тем не менее, я не могу обнаружить дыры в моих рассуждениях, поэтому я надеюсь, что вы все сможете, чтобы я мог двигаться дальше.