2014-10-14 2 views
0

Я читал почти все вопросы здесь и много связанных аргументов в www, но все же я не уверен, что хорошо понимаю суть, и, вероятно, я пропущу что-то, что очевидно для всех, поскольку я думаю, что это вполне общая ситуация ...Где должна находиться логика для сборки объекта домена из DAO?

Пожалуйста, простите мой ужасный английский и перепутанную терминологию, но меня не интересуют различия/преимущества/оговорки DAO vs Repository, я думаю, что это не меняет «ядро», вопроса, но, возможно, я ошибаюсь.

Очевидно, что пример слишком прост, и каждое решение легко перегоняет, но подумайте об этом как о «корпусе» для гораздо более крупной системы.

Предположим, вам нужно создать приложение, предлагающее продавцам звонить людям.

У каждой перспективы есть некоторые «текстовые» данные (например, имя, пол, дата рождения, адрес, номер телефона, электронная почта, ...), фотография и некоторая история его/ее взаимодействия с другими лицами и продавцами.

Текстовые данные хранятся в таблице Mysql (лицо), где-то в файловой системе, и кто-то уже выпустил службы, которые возвращают список потенциальных лиц, заинтересованных в контакте, учитывая продавца и оценку для каждой перспективы в качестве покупателя ,

Я, вероятно, в конечном итоге следующее:

  1. общедоменного Person объекта с именем, номер телефона, адрес, адрес электронной почты и фото. Setters и getters для всего свойства плюс методы getScore().

  2. Два DAO, один для таблицы mysql и один для файловой системы.

  3. Услуга для получения списка перспективы для данного продавца (пользователь приложения, который не входит в объем данного примера).

Что мне не ясно:

  1. Метод getScore() в объекте домена может непосредственно вызвать службу в уровне услуг? Если нет, то почему?

  2. Нужен ли мне отдельный DTO для данных, поступающих из разных DAO?

  3. Если это так, мне нужен какой-то менеджер или «супер» DAO, которые владеют логикой о том, как собрать две части информации (т. Е. Получить URI из DQ mysql, загрузить файл, загрузить изображение) ? Должно ли это находиться в слое данных или на уровне обслуживания? (мне кажется, что я должен оставаться в слое данных, поскольку он имеет дело с хранением данных).

  4. Вывод менеджера или «супер DAO» должен быть другим DTO или может быть непосредственно объектом домена?

  5. Если DTO, мне нужна служба, которая вызывает диспетчер/супер DAO и создает объект домена (в этом случае я предполагаю, что служба «добавит» счет объекту домена).

Я знаю, что я сформулировал вопрос, но я не могу понять, как разработать решение.

ответ

0

Отправная точка для ответа:

  1. Я думаю, что метод getScore() должен принадлежать к службе не к объекту домена
  2. дела вкуса
  3. Это такой службе ИМХО
  4. Выход услуги может быть DTO или доменным объектом

Короче говоря (и, на мой взгляд)

  • домен объекты являются «немыми» классами (только здесь карты ДАННЫХ с объектами)
  • Daos здесь, чтобы принести ДАННЫЕ (и это его)
  • DTOS может быть использован в качестве посредники между DAO и услугами
  • услуги здесь, чтобы выполнить соответствующие действия (используя dao), в вашем случае вычисление оценки, например

Использование допускается снизу вверх, т.е. служба может использовать DAO, но не наоборот, чтобы облегчить возможность изменения (например: DB Серверные изменения => Объекты DAO обновляется и это все)

=> вики сообщества

+0

HI, резервуары для вашего ответ, но я все еще немного смущен: – Marcoc1712

+0

DAO = доступ к данным, DO = представление данных, поэтому не тот же класс IMHO –

+1

http://www.martinfowler.com/bliki/AnemicDomainModel.html –

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