|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Последние полгода на одном из своих проектов я перешел на необычный для меня концепт - package by feature . Суть его в том что мы не делим проект на пакеты типа model, dao, service, controller. Вместо этого мы делим их по фичам, и внутри фича-пакета у нас классы всех слоев. Пока я очень доволен - структура проекта отражает то что он делает, кол-во public классов уменьшилось, наверно, раза в 3. Однако проект пока скромных размеров (без тестов это 25 kloc на бэке), а на мелких проектах все подходы выглядят хорошо. Особенно интересно мнение людей которые уже сталкивались с таким. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2021, 10:18 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
если фичи мелкие то часто получается структура из пакетов фичи где внутри по одному классу. если проект долгожвущий со временем становися очень много пакетов фич, в IDE не влазит а удалять вроде как не хочется вдруг что используется (заказчик сторонний и сам управляем что работает а что нет). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2021, 10:36 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, Странный ты. ИС уже 20 лет резали по функционалу и по предмету бизнес задач. А вот внутри подсистема резалась на слои... DAO и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2021, 11:16 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
lleming, Конечно, фичи это слишком мелко. Согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2021, 11:18 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
lleming если фичи мелкие то часто получается структура из пакетов фичи где внутри по одному классу. если проект долгожвущий со временем становися очень много пакетов фич, в IDE не влазит а удалять вроде как не хочется вдруг что используется (заказчик сторонний и сам управляем что работает а что нет). Вообще мне сложно представить как может в пакете один класс оказаться, ведь очень вероятно что ему нужно что-то отдать на UI или сохранить что-то в БД. Вот, например, простенький пример где нужно лишь получить запрос с UI и ответить обратно: Код: sql 1. 2. 3.
Я не думаю что (во всяком случае в моей ситуации) пакет может быть меньше этого. Разве что и запрос, и ответ - примитивы, тогда останется только RegressionApi. А вот пакет по-серьезней, который возможно следует нарезать по-тоньше, но здесь нет БД и API: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
А вот более типичный пакет где все слои есть: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2021, 14:10 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev lleming если фичи мелкие то часто получается структура из пакетов фичи где внутри по одному классу. если проект долгожвущий со временем становися очень много пакетов фич, в IDE не влазит а удалять вроде как не хочется вдруг что используется (заказчик сторонний и сам управляем что работает а что нет). Вообще мне сложно представить как может в пакете один класс оказаться, ведь очень вероятно что ему нужно что-то отдать на UI или сохранить что-то в БД. Вот, например, простенький пример где нужно лишь получить запрос с UI и ответить обратно: Код: sql 1. 2. 3.
Я не думаю что (во всяком случае в моей ситуации) пакет может быть меньше этого. Разве что и запрос, и ответ - примитивы, тогда останется только RegressionApi. А вот пакет по-серьезней, который возможно следует нарезать по-тоньше, но здесь нет БД и API: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
А вот более типичный пакет где все слои есть: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Тяжелое наследие Java и ООП головного мозга. Если убрать весь шум из геттеров, сеттеров, конструкторов и equals\hashcode, то всю доменную модель можно уместить в одном файле Models. Также, из-за наличия стейта в классах и неудобства оформления\переиспользования лямбд - приходится городить все эти AreaIntegrator, DigitalFilter и т.п хрень, которые по сути являются функциями, которые принимают что-то на вход и выдают детерменированный результат и поэтому могут быть отправлены в неймспейс calc либо math либо filters. У меня обычно feature это объект Model, объект Service, и возможно API(но тут надо взвесить все за и против, зачастую оно нафиг не надо). Ну и общий подпроект common со всякими утилсами(иногда имеет делать общий на проект, иногда на фичу) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2021, 14:42 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Если у Станислава фичи - слабосвязные между собой то это хорошая практика. Получается что внедрение новой фичи почти не затрагивает старый код. Минимум изменений - всегда знаешь где искать баг. Но мне кажется что это может быть специфика напрмимер маркетинг-акций. Акция длилась 1 мес. Под нее писались изолированные покеты (или слабосвязные). Потом она закончилась и ее логика уже по сути не нужна. И еще в голове почему-то вертится Blue-Green deployment и мне кажется что это по духу близко к теме топика. Такой-себе безобрывный и надежный деплой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 13:53 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
maytonЕсли у Станислава фичи - слабосвязные между собой то это хорошая практика. Получается что внедрение новой фичи почти не затрагивает старый код. Минимум изменений - всегда знаешь где искать баг.Было бы здорово конечно, но в моем случае это все-таки не так. Наверно слово "feature" в этом подходе сбивает с толку. Я бью пакеты по куску домена, и уж если внутри большого пакета наклевывается какая-то фича, тогда получается еще создать пакет вот только с этой фичей. Но пока это редкость. maytonИ еще в голове почему-то вертится Blue-Green deployment и мне кажется что это по духу близко к теме топика. Такой-себе безобрывный и надежный деплой.Не, с деплоем это никак не связано. Все пакеты (независимо от разбиения) попадают в общий итоговый артефакт. И если нам нужен беспрерывный деплой, то в любом случае нужно какой-то код написать или конфигурацию изменить. Т.е. изменения потребуются те же вне зависимости от того как мы на пакеты нарежем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 14:41 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
mayton, Вот твой соседний топик - утилита а ля информационная система (ИС). Ты пакеты как нарезаешь? Я к тому что пакет org.apache.catalina.authenticator.My..... Вполне решает задачи ТС штатным образом. Или у него пакет не org.apache.catalina.authenticator.My..... А такой: app.myDAO? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 14:42 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, >Я бью пакеты по куску домена = ну вот вам и причина. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 14:45 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
кусок домена = микросервис, не? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 14:50 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
забыл ник кусок домена = микросервис, не? Без них. Кстати, кусок домена странная фраза. Хоть с сервисами, хоть без них))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 14:55 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
>Последние полгода на одном из своих проектов я перешел на необычный для меня концепт - package by feature. Мы пришли к похожему решению в одном из продуктов, а также оставивли только final public классы доступными снаружи этих пакетов (см. https://en.wikipedia.org/wiki/Fragile_base_class или https://codeburst.io/inheritance-is-evil-stop-using-it-6c4f1caf5117) Причина: - у нас продукт состоит из нескольких фич-доменов. - проекты внедрения у заказчика забирают часть функциональных доменов и кастомизируют продуктовое поведение Такой подход позволяеет уменьшить импакт при выпуске патча или новой версии на проекты. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 16:49 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Было бы здорово конечно, но в моем случае это все-таки не так. Наверно слово "feature" в этом подходе сбивает с толку. Я бью пакеты по куску домена, и уж если внутри большого пакета наклевывается какая-то фича, тогда получается еще создать пакет вот только с этой фичей. Но пока это редкость. Непонятно что такое "кусок домена". Можно пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 16:55 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
deleted ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 16:58 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Тема топика была - подводные камни. И мне кажется что подводным камнем может быть просто распухание системы имен пакетов. Код: java 1. 2. 3. 4. 5. 6. 7. 8.
И некая бюрократия. Возможно в каком-то 2025 году будет сложно собрать части одного слоя т.к. он распылен по большому количеству пакетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 17:06 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
kolchanov, Согласен. Вообще все крутится вокруг фич))). Ну а для удобства Внутри фичи, делай и дели на что угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 17:13 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
mayton, Для кого то фича это - ТорговляИсклад. Для кого то фича это - справочник валют. На сколько бить систему вопрос сложный. Думаю доменные куски у него и есть как раз Справочник валют. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 17:18 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
mayton Stanislav Bashkyrtsev Было бы здорово конечно, но в моем случае это все-таки не так. Наверно слово "feature" в этом подходе сбивает с толку. Я бью пакеты по куску домена, и уж если внутри большого пакета наклевывается какая-то фича, тогда получается еще создать пакет вот только с этой фичей. Но пока это редкость. Непонятно что такое "кусок домена". Можно пример? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
В каждом пакете может быть как одна или несколько Сущностей, так и DAO, Service, API, DTO классы. Мм.. возможно даже вызовы к внешним сервисам. maytonВозможно в каком-то 2025 году будет сложно собрать части одного слоя т.к. он распыленВот я сначала тоже переживал, а потом подумал.. а зачем бы это надо было. maytonИ мне кажется что подводным камнем может быть просто распухание системы имен пакетов.А разве мы получаем много новых пакетов? Раньше было: Код: sql 1. 2. 3.
И если пакет распухал, то внутри model & service мы создавали пакет branch. А теперь: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 18:02 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, просто мне на секунду показалась что количество пакетов возводится в квадрат. Ну... знаешь когда тебе надо каждый с каждым сочетать. Это как конвертер их классов {m} в {n}. Если не делать косвенных уровней абстракции то тебе надо кодить m*n сущностей-конвертеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 18:25 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Сущность это класс. А класс это таблица. Понятно что ты зачастил сударь))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 18:43 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Тут два аспекта. - практический. После года программирования, прогер и так увидит что выше деление слишком частое. - теоретический Если работать по ГОСТ, то в п. 4.1.1.1 есть перечень подсистем. Это и есть прекрасная возможность поделить на пакеты) http://www.rugost.com/index.php?option=com_content&view=article&id=108:34-4-8&catid=25&Itemid=62 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 19:04 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
Я думаю что большинству из нас эти госты не нужны. Так... потеря времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 19:06 |
|
Package by feature - подводные камни
|
|||
---|---|---|---|
#18+
mayton Я думаю что большинству из нас эти госты не нужны. Так... потеря времени. А то говорят и пол сейчас не нужен))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 19:09 |
|
|
start [/forum/topic.php?fid=59&tid=2120377]: |
0ms |
get settings: |
28ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
548ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 666ms |
0 / 0 |