Я думав про це деякий час тому, і нещодавно він знову з’явився, коли мій магазин робить свою першу справжню веб-програму Java.
Як вступ, я бачу дві основні стратегії іменування пакетів. (Щоб бути зрозумілим, я не маю на увазі всю частину цього "domain.company.project", я говорю про умову пакета під нею.) У будь-якому випадку, я бачу наступні правила іменування пакетів:
Функціональні: Присвоєння імен вашим пакетам відповідно до їх архітектурної функції, а не від ідентичності відповідно до ділового домену. Іншим терміном для цього може бути найменування відповідно до "шару". Отже, у вас буде пакет * .ui та * .domain та * .orm пакет. Ваші пакунки - це горизонтальні фрагменти, а не вертикальні.
Це набагато частіше, ніж логічне іменування. Насправді, я не вірю, що коли-небудь бачив або чув про проект, який це робить. Звичайно, це змушує мене скупити (щось на зразок думки, що ти придумав рішення проблеми NP), оскільки я не дуже розумний, і я припускаю, що кожен повинен мати серйозні причини робити це так, як це робить. З іншого боку, я не проти, щоб люди просто сумували за слоном у кімнаті, і я ніколи не чув реального аргументу для того, щоб робити імена пакетів таким чином. Це, здається, фактично стандарт.
Логічно: присвоєння імен вашим пакетам відповідно до ідентичності їх бізнес-домену та включення кожного класу, який пов’язаний із цим вертикальним фрагментом функціональності, до цього пакету.
Я ніколи не бачив і не чув про це, як я вже згадував раніше, але для мене це має сенс.
Я схильний підходити до систем вертикально, а не горизонтально. Я хочу зайнятися розробкою системи обробки замовлень, а не рівня доступу до даних. Очевидно, є велика ймовірність, що я торкнуся рівня доступу до даних при розробці цієї системи, але справа в тому, що я не думаю про це так. Що це означає, звичайно, це те, що коли я отримую замовлення на зміну або хочу впровадити якусь нову функцію, було б непогано, коли б не довелося їздити на риболовлі в купу пакетів, щоб знайти всі пов’язані класи. Натомість я просто заглядаю в пакет X, тому що те, що я роблю, пов’язане з X.
З точки зору розвитку, я розглядаю як головний виграш, якщо ваші пакети документують ваш бізнес-домен, а не вашу архітектуру. Я відчуваю, що домен - це майже завжди та частина системи, яку важче продирати, де, оскільки архітектура системи, особливо на даний момент, стає майже повсякденною у її реалізації. Той факт, що я можу прийти до системи з таким типом домовленостей про іменування, і миттєво з іменування пакетів знаю, що вона має справу із замовленнями, клієнтами, підприємствами, продуктами тощо, здається надзвичайно зручним.
Здається, це дозволить вам набагато краще скористатися модифікаторами доступу Java. Це дозволяє набагато чіткіше визначати інтерфейси в підсистемах, а не в рівнях системи. Отже, якщо у вас є підсистема замовлень, яка хоче бути прозорою стійкою, теоретично ви ніколи не могли б повідомити нічому іншому, що вона стійка, не створюючи загальнодоступних інтерфейсів до своїх класів стійкості на рівні дао, а замість цього упаковуючи клас дао в лише з класами, якими він займається. Очевидно, що якщо ви хочете розкрити цю функціональність, ви можете надати для неї інтерфейс або зробити її загальнодоступною. Просто здається, що ви втрачаєте багато цього, маючи вертикальний зріз функцій вашої системи, розділений на кілька пакетів.
Я припускаю, що одним недоліком, який я бачу, є те, що він ускладнює виривання шарів. Замість того, щоб просто видалити або перейменувати пакет, а потім скинути новий на місце за допомогою альтернативної технології, вам доведеться зайти і змінити всі класи у всіх пакетах. Однак я не бачу, що це велика справа. Можливо, це пов’язано з відсутністю досвіду, але я повинен уявити, що кількість разів, коли ви замінюєте технології, блідне порівняно з тим, скільки разів ви входите та редагуєте вертикальні фрагменти об’єктів у вашій системі.
Тож я думаю, тоді питання постане перед вами, як ви називаєте свої пакунки і чому? Зрозумійте, будь-ласка, я не обов’язково думаю, що тут я натрапив на золоту гуску. Я досить новий у всьому цьому з переважно академічним досвідом. Однак я не можу помітити дірок у своїх міркуваннях, тому сподіваюся, що ви всі можете, щоб я міг рухатися далі.