2014-12-16 2 views
0

Я использую Spring с Hibernate.Архитектура Java - Самоуправляемые классы и классы менеджера

Моя модель спящего режима, которую я использую, - это «NodeInstanceLog», который является объектом, который извлекается из базы данных.

Моя текущая структура:

current structure

На данный момент NodeInstanceLogDAO является обработка извлечения данных из базы данных.

Другим вариантом было бы изменить мою структуру, чтобы сделать его таким, чтобы NodeInstanceLog был fetchable и позволял ему управлять собой. Т.е. он может извлекать свои данные из базы данных.

В чем преимущества и недостатки каждого из них?

ответ

2

В простой Java, используя DAOs/Repositories, обычно лучше, так как в противном случае ваши объекты должны иметь довольно много логики базы данных. Логика базы данных не является бизнес-логикой, и ваша модель должна представлять только бизнес-модель.

Play - это основа, которая автоматически сплет много логики персистентности в ваши классы (используя аспекты), таким образом, ваш класс модели имеет методы запроса к БД, но у него нет логики.

Если вы изучаете этот материал, я хотел бы предложить вам реализовать оба и испытать то, что причиняет боль каждое решение создает (например, как вы имеете дело с транзакциями? Откуда вы взять DB Connection?)

I также предложите вам прочитать книгу Patterns of Enterprise Application Architecture, в частности Активную запись (с логикой, сплетаемой в ваш класс) и Единица работы (спящий режим)

4

Это вопрос разделения озабоченности. Модель представляет собой часть вашего проблемного домена, в то время как DAO занимается получением данных в и из хранилища данных. Две совершенно разные проблемы, требующие специальных классов.

В целом, чем больше вы разделяете ответственность, тем более модульная база вашего кода имеет множество преимуществ: * наши мозги, как правило, хороши в фокусировке по одной маленькой вещи за раз, поэтому чтение (= поддержание) вашего код будет проще, поскольку он более структурирован. * тестирование легче, когда разные обязанности разделены небольшими классами: тест может манипулировать одним простым фокусным классом за один раз * повторное использование более вероятно: если вы хотите сделать что-то еще с экземпляром модели, который не имеет ничего общего с DAO , что код DAO там будет перетаскиваться в другую вещь, которую вы хотите делать зря

В любом случае, возможно, есть еще много чего сказать. Попробуйте «разделить беспокойство», «развязать беспокойство», «развязать связь», ... но возьмите это у меня: разделение обязанностей - это путь :)

+0

Итак, вы говорите, что разделяйте обязанности, которые NodeInstanceLog будет удерживать данные, а не выбор себя, как вы идете? – user2469515

+0

Скорее всего :) – Thomas

Смежные вопросы