Какие слои должны говорить о моделях доменов? - PullRequest
2 голосов
/ 27 февраля 2009

Допустим, у меня есть такой метод в бизнес-слое:

// This is in the business layer
public Result DeleteSomeDomainObject( ???? )
{
   //Enforce business logic here.

   //Delete records in the database
   DAL. DeleteSomeDomainObject( ??? )
}


// This is in the data access layer
public Result DeleteSomeDomainObject( ???? )
{
   // Delete records from the database.       
}

Должны ли эти методы использовать экземпляры модели домена или только первичные ключи?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2009

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

Если мы говорим о сети, ваш веб-уровень будет иметь идентификатор. Скорее всего, он создаст экземпляр объекта или извлечет его из сервисного уровня. Поэтому имеет смысл передать его на уровень обслуживания.

Однако часто бывают случаи, когда вам приходится дублировать извлечение объекта. Иногда ваши службы будут загружать объект в любом случае из-за некоторых дополнительных данных, не записанных в веб-слое. У меня даже были случаи, когда слой доступа к данным должен загружать объекты для зависимостей. Кэширование может решить некоторые из этих проблем, а реструктуризация ваших данных / модели может исправить другие. Конечно. Но иногда, в свете производительности или других проблем, передача идентификатора имеет больше смысла.

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

1 голос
/ 27 февраля 2009

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

...