Доступ на уровне домена к постоянным ресурсам - PullRequest
2 голосов
/ 27 мая 2009

Я стараюсь поддерживать свой уровень домена как можно более «чистым», не тратя время на постоянство или другие проблемы с инфраструктурой. Однако бывают случаи, когда моему доменному уровню необходимо использовать службы СУБД или другой внешней зависимости, и я не знаю, как с этим справиться.

Например, каждый объект домена в моем приложении реализует интерфейс IValidatable, который вызывается клиентами для получения списка нарушенных правил, которые препятствуют сохранению объекта. В некоторых случаях вышеупомянутая процедура проверки включает вызов класса DAO для проверки существования конкретной записи. Мы не используем ORM; вместо этого мы используем постоянный слой, построенный с использованием шаблона объекта доступа к данным. Должен ли я просто создать класс service / wrapper для доступа к этой базе данных и сделать так, чтобы мой объект домена сотрудничал с ним? Допустимо ли добавлять этот уровень косвенности или я все еще загрязняю свой объект домена?

Ответы [ 2 ]

2 голосов
/ 27 мая 2009

Обычным ответом будет использование некоторого объектно-реляционного интерфейса. Слой вашего домена представляет интерфейс модели вашего домена. У вас есть реляционная база данных под обложками, и вам нужен слой между ними для выполнения объектно-реляционного отображения . Вы говорите: «Мы не используем ORM», но на самом деле это так: вы просто делаете это сопоставление непосредственно на уровне домена.

Проблема создания этого отображения известна как проблема несоответствия объектно-реляционного импеданса . Если вы настаиваете на том, чтобы не идентифицировать явный уровень ORM, тогда да, вы должны написать классы, чтобы инкапсулировать детали использования СУБД (конечно, когда вы это сделаете, вы введете там классы ORM.)

Действительно, очень трудно избежать наличия некоторого слоя ORM.

1 голос
/ 02 июля 2010

Я давно придерживался мнения, что вы не можете скрыть знания о постоянстве в постоянном доменном объекте. Попытки сделать это становятся все более неестественными и приводят к странным побочным эффектам. Другими словами, я думаю, что встраивание знаний о постоянстве на уровне предметной области - это нормально, но не обязательно точное средство постоянства; должен использоваться интерфейс DAO.

Я должен добавить, что, в зависимости от вашей проверки, вы находитесь в состоянии гонки. Вы должны быть готовы обработать любые исключения из ограничений, которые могут возникнуть из-за этого.

...