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