在域模型中将技术特定的东西放在哪里?

时间:2010-01-05 08:49:02

标签: c# active-directory domain-model

我们有一个应用程序,与许多东西一起,对Active Directory进行一些更改(从组中添加/删除用户,更改用户的属性值等)。

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

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

或者是否应该在服务层中执行所有Active Directory访问,而不是涉及域层?

2 个答案:

答案 0 :(得分:2)

域模型应与技术无关,因此请勿将AD代码放入域模型中。

从本质上讲,您可以说AD代码只是数据访问的另一种形式,因此它属于数据访问 Layer (DAL)。但是,它不属于您的数据库模块,因为这会违反Single Responsibility Principle(SRP - 它适用于模块以及各种类型)。

不是将它与数据库访问捆绑在一起,而是在自己的库中实现它。从概念上讲,它属于同一层,但它做了不同的事情,所以现在你在同一层有两个库。这绝对没问题 - 你可以根据需要在每一层中拥有尽可能多的库。

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

这非常适合Domain-Driven Design以及反腐败层的概念。

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

答案 1 :(得分:0)

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