Учитывая, что вы на 90% завершены, это, безусловно, не то, что я спешу немедленно сделать. Я бы продолжал поддерживать вашу нынешнюю стратегию реализации, по крайней мере, на данный момент.
Но это как раз один из разработчиков ошибок, когда они предпочитают повторно использовать одни и те же классы моделей на разных уровнях в своем приложении. Когда вы хотите внедрить новую технологию или сделать радикальное изменение на более низком уровне, все слои, которые сидят поверх этого, затронуты. Это приводит к серьезному техническому долгу, который следует избегать.
Простые, основанные на прототипе приложения, безусловно, могут избежать повторного использования этого типа кода, но более сложные сложные приложения не должны по причинам, указанным выше.
Что вы можете сделать, это реорганизовать код, чтобы у вас были более чистые и более четкие границы между различными слоями приложения. Идеальный сценарий что-то вроде:
- моделей Persistence (это ваши
@Entity
классов)
- модели домена (это то, что ваши услуги принимают в качестве входных данных и возвращать в качестве выхода)
- Посмотреть модели (это то, что контроллеры принимают в качестве входных данных и возвращать в качестве выходного сигнала)
Каждый слой будет содержать некоторое количество отображения кода, который знает, как взять один тип модели к другому, что-то вроде этого:
- Контроллер принимает вид-модель и отображает ее на модель домена
- Контроллер требует обслуживания вашей модели домена
- служба вызывает хранилище с моделью предметной области
- Repository занимает модель предметной области и карты это модель инерционности
- Repository вызовы Hibernate с моделью инерционности
Многие могут рассматривать это как unnecessa и, как я уже указывал, в простых и основных случаях использования, это правда. Но преимущество здесь в том, что вы избегаете ненужного сцепления между слоями, когда начинаете их разделять так.
Как минимум, стоит разделить модели просмотра и настойчивости. Это позволяет моделировать структуру вашего хранилища данных, где это имеет наибольший смысл, позволяя использовать вариант для полностью другого открытого интерфейса REST. Таким образом, по мере того, как требования изменяются на любом конце спектра, они могут делать это, только имея дело с кодом сопоставления, который находится между ними.
Не стоит думать, как структурировать существующий код, чтобы быть более подробным и легче ориентироваться и находить интересные вещи, а затем попытаться реорганизовать его по частям. –
@ KrzysztofCichocki, пожалуйста, продумайте немного? –
Изменение кода доступа к БД в огромном 90% -ном проекте будет таким же, как открытие окна пандоры с непонятными и страшными ошибками, ожидающими увидеть дневной свет, эти ошибки (количество и неопределенность их) будут есть ваше время и, вероятно, прибыль от проекта. –