2

我们有一个应用程序,除了许多事情之外,它还对 Active Directory 进行了一些更改(从组中添加/删除用户、更改用户的属性值等)。

我们现在正在重新设计它(从“意大利面条代码”到更分层的解决方案)。Active Directory 管理功能是我们希望在域层中抽象出某种程度的东西,但同时,大多数功能都非常依赖技术。

我们应该将所有 Active Directory 访问代码与我们的 DB 访问一起放在数据访问层中,还是可以创建一个 Active Directory 函数库并直接从域模型调用该库?这使得域对象具有持久意识,这可能是一个坏主意?

还是应该改为在服务层执行所有 Active Directory 访问,甚至不涉及域层?

4

2 回答 2

2

领域模型应该与技术无关,因此不要将您的 AD 代码放在领域模型中。

本质上,您可以说 AD 代码只是另一种形式的数据访问,因此它属于数据访问(DAL)。但是,它不属于您的数据库模块,因为这将违反单一职责原则(SRP - 它适用于模块以及单个类型)。

与其将它与数据库访问捆绑在一起,不如在自己的库中实现它。从概念上讲,它属于同一层,但它做不同的事情,所以现在您在同一层中有两个库。这绝对没问题——你可以在每一层有你需要的任意数量的库。

在域模型中,将 AD 访问(和 DB 访问)视为抽象。抽象存储库是默认方法。AD 库将包含 AD 存储库的实现,而 DB 库将包含 DB 存储库的实现。

这与领域驱动设计反腐败层的概念非常吻合。

您可以使用依赖注入(DI) 将具体的存储库与您的域模型连接起来。

于 2010-01-05T09:06:54.053 回答
0

我认为技术特定的东西是实现细节,不应该放在领域模型中。

于 2010-01-05T08:53:18.047 回答