
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
24.12.2012, 01:04:39
|
|||
|---|---|---|---|
Наследование сущностей и сервис классы |
|||
|
#18+
Подскажите пожалуйста правильный способ имплементации. Например есть интерфейс Person с полями FirstName И SecondName. Этот интерфейс имплементируют domain entities - Manager и Customer, у которых есть доп поля, отличающиеся между собой, ну например у Manager есть поле Team, а у Customer есть поле Company. Ну и соотв они мэппятся в разные таблицы. Теперь нужно создать service layer для работы с этими сущностями. Например на странице create-person можно создать и Manager, и Customer. И например на этой странице только 2 обязательных поля - FirstName и SecondName. Как правильно создавать Service классы? Должен быть ManagerService и CustomerService? Или должен быть только PersonService, а внутри должна быть проверка в каждом методе, что это за имплементация - Manger или Customer - и вызывается соответствующий метод в persistence layer, соответствующий классу. Я использую Spring JPA Data, и там каждый persistence класс привязан к определенной domain entity. Как-то не хочется вызывать Код: java 1. 2. 3. 4. 5. 6. 7. 8. Как правильно должны соотноситься в таком случае сервис классы и доменные ентати? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2012, 05:20:24
|
|||
|---|---|---|---|
Наследование сущностей и сервис классы |
|||
|
#18+
Надо полагать, "person instane of Manager" - это "person instanceof Manager", а под условием "р" - это "person"? Думаю, проблема разделения сервис-слоя относится к предпочтениям работы с объектами. Хотя, надо полагать, у тебя веб-проект (раз речь об страницах, а не, скажем, об окнах), следовательно, раз person знает, что он Manager или Customer, то где-то произошла сериализация данных с запроса. Поэтому логично было бы не спрашивать в очередной раз у объекта "чьих он", а разделить логику, тем более, что она может разростаться. А ДАО-методам, в принципе, все равно - используй более универсальный репозиторий и скармливай его методам Object, а он сам разберется с сущностями и на какую таблицу персистировать (по крайней мере, Хибернейт это делает без указания класса сущности). Кстати, ты можешь модифицировать структуру, сделав Person не интерфейсом, а сущностью с @javax.persistence.Inheritance(strategy = javax.persistence.InheritanceType.JOINED) с полями firstName/lastName, а Manager и Customer - "extends Person", но уже без пересекающихся полей. Правда, это не касается поставленного вопроса ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2012, 11:53:39
|
|||
|---|---|---|---|
|
|||
Наследование сущностей и сервис классы |
|||
|
#18+
oson, У вас ошибка где-то раньше. Например в контроллере, если вы используете MVC. Выбирать правильный workflow нужно там же где вы формируете объект и решаете будет это Manager или Customer. Там у вас есть какие-то явные признаки, которые вы уже используете. И оттуда каждая из сущностей идёт уже своей транзакцией. А когда нужно реализовать общее поведение, то приходится делать паралельную иерархию (GoF Bridge). В этом как раз проявляется недостаток анемичной модели. Через rich можно реализовать всё в той же иерархии, но вылезут проблемы сильной связности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2012, 12:34:44
|
|||
|---|---|---|---|
Наследование сущностей и сервис классы |
|||
|
#18+
oson, вот у тебя вопрос вроде бы по БЛ. Но код-пример ты привёл совсем не Бизнес-логие (сервисного слоя). Не можешь реальный Hello World привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.01.2013, 01:05:57
|
|||
|---|---|---|---|
Наследование сущностей и сервис классы |
|||
|
#18+
Вот пример логики - Employe и Manager. Такая иерархия Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. На странице можно выбрать из списка сотрудника и выбрать из второго списка отдел. Нажимаем Save. Если это простой сотрудник, то должен быть вызван метод save(Employe employe), в котором сотрудник добавляется в список List<Employe> employes у класса Department. Если это Manager, то вызывается метод save(Manager manager), в котором этот сотрудник становится полем Manager departmentManager у класса Department. Как располагать эти методы в классах Service layer. Можно например создать класс PersonService и сделать такую иерархию Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. То есть структура сервис классов будет повторять структуру доменных сущностей. Делается так? Удобно это или это абсурд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&tablet=1&tid=2130258]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 276ms |
| total: | 440ms |

| 0 / 0 |
