Это не дублирование кода.Алгоритмы не дублируются.Бизнес-логика все еще находится в одном месте.
То, что делает ваш компонент, просто соединяет модель View с доменом.Это хорошо, это часть паттерна MVC.
Если бы вы использовали вашу сущность JPA в качестве базового компонента, вы бы нарушили паттерн MVC.Например, если однажды вместо отображения простого String
вам потребуется добавить Date
к этому String
, потому что представление требует этого (то есть требования к интерфейсу), вы собираетесь написать эту логику представления внутри JPAучебный класс?Это не имеет смысла, смешивая модель домена и модель представления.
С другой стороны, почему представление должно знать о том, как реализован домен?Что если формат значений домена изменится?(Например, вы экономите временную метку String вместо класса даты в базе данных для повышения производительности).Все, что вам нужно сделать, - это просто переписать метод в компоненте поддержки, для этого потребуется метка времени и адаптировать его к дате, чтобы все работало так, как было раньше.Только одно изменение вне класса JPA.Если бы у вас было это в классе JPA, вы бы в итоге поддерживали обе логики только в одном классе (логика интерфейса и логика домена).
Что если вы хотите разработать новое представление (например, для мобильной версии)?Ты собираешься добавить еще больше кода в класс JPA?Было бы лучше сохранить JPA как есть и создать еще один Bean (который расширяет общий bean для обоих представлений) для мобильной версии.
Если после всего этого вы все равно хотите не писать геттерыи сеттеры, вы можете сделать
#{myBean.page.title}
все, что вам нужно, это getPage()
внутри поддерживающего боба.