Стоит ли дублировать модель сущности?

В моем приложении есть сущности. но некоторые сущности нуждаются в реализации интерфейса. Например, У меня есть сущности "Курс", "Урок". Я создал интерфейсы «CourseService», «LessonService» и «CourseServiceImpl», «LessonServiceImpl». Но проблема в том, что мои «Курс» и «Урок» должны реализовывать интерфейс «Платный». что мне делать? дублировать мои объекты?

Спасибо,

Почему бы вам просто не добавить на свои интерфейсы Course и Lessonextends Payable? Таким образом, у вас будут ваши сущности, которые будут Payable. Хотя, что касается дизайна, я настоятельно рекомендую не использовать такое решение, поскольку для сущностей лучше не иметь интеллекта в своем коде.

DamCx 25.04.2018 09:22

В чем именно проблема? Почему бы вам просто не позволить Course и Lesson реализовать интерфейс Payable?

HBo 25.04.2018 09:36

@HBo, Course и Lesson - это классы сущностей. если я реализую интерфейс Payable, они будут содержать методы из интерфейса Payable. Правильно ли содержать бизнес-методы в классах сущностей?

user813512 25.04.2018 09:41

@ElvinAliyev вроде как в точку, да. Но вам действительно стоит создать пример, показывающий нам, что вы сделали, что не так и что вы пытались исправить. Кроме этого, это просто догадка за догадкой ...

HBo 25.04.2018 09:43

@DamCx не могли бы вы объяснить, почему у сущностей не должно быть интеллекта в своем коде? Желательно со ссылкой на признанную методологию. Те, кого я знаю (особенно DDD), говорят прямо противоположное

crizzis 25.04.2018 11:07

@crizzis DDD - это особый способ разработки кода и объектов. В большинстве случаев сущности JPA генерируются, поэтому вы не хотите иметь в них интеллекта, поэтому вы уверены, что ничего не пропустите и не сломаете свой код.

DamCx 25.04.2018 11:38

@DamCx «В большинстве случаев сущности JPA генерируются» звучит довольно анекдотично, и если бы я предоставил собственное анекдотическое свидетельство, это указывало бы на вывод, что в большинстве случаев сущности генерируются нет. Все, что я хотел отметить, это то, что ваш комментарий звучал так, будто в JPA существует техническое ограничение или всеобщий консенсус в отрасли, что сущности не должны содержать логику, ни то, ни другое на самом деле не так.

crizzis 25.04.2018 13:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
66
1

Ответы 1

Не совсем. Я предполагаю, что ваш интерфейс Payable имеет метод pay(). Реализуйте это в обеих ваших сущностях. Если реализации разные, все в порядке. Если они одинаковы, вы можете извлечь его в другой объект и инкапсулировать в Course и Lesson. Или нет - нет ничего плохого в дублировании кода как такового - только с кодом, который сложно изменить и расширить. У нас есть принцип DRY - не повторяйся. Я предпочитаю НАПИТОК - повторить, если необходимо, Кей? :) (Хотя не уверен, кто это придумал).

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

Другие вопросы по теме