2014-11-07 8 views
1

При сопоставлении между объектами базы данных и объектами домена, в каком слое моего приложения должна находиться эта функция?Сопоставление объектов между доменом и базой данных

Скажем, у меня есть:

  • DAL - имеет ссылку на основной домен
  • Service - имеет ссылку на DAL и основной домен

Где отображение более надлежащим образом размещены в этом сценарий?

ответ

0

Ваш DAL был бы хорошим местом в этом сценарии, поскольку он уже ссылается на ваше ядро, в котором должны жить ваши объекты домена. Он может делать выборку данных и преобразовывать их в объекты домена перед возвратом.

Таким образом вы можете инкапсулировать знание объектов БД на уровень DAL, что хорошо. Если вам когда-либо понадобится изменить свой DB, вам нужно только изменить этот уровень. Остальная часть приложения знает только о Домене.

+1

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

+0

Да, основываясь на вашем описании, я понял, что ваша архитектура была скорее луковой архитектурой, чем традиционным n-уровневым. Это решение позволяет сохранить знания о ваших конкретных реализациях, абстрагированных от ядра вашего приложения. – wblanks

0

Если вы хотите следовать принципу, согласно которому слой должен знать только о следующем слое (идея взята из Law of Demeter), лучшей практикой было бы разместить код перевода на уровне обслуживания.

Однако, поскольку основной домен можно считать другим уровнем посреди уровня обслуживания и уровня доступа к данным, и, учитывая, что уровень обслуживания напрямую связан с DAL (нарушая принцип LoD), возможно, более простой и более прагматичный Решение (как говорит @wblanks) может заключаться в том, чтобы поместить код перевода на уровень доступа к данным.

+0

Хотя я согласен и стараюсь придерживаться LoD, учитывая, что оба уровня знают о домене ядра (для определения интерфейсов сущностей и репозиториев), это все еще применимо? – Unflux