我们有一个应用程序,它可以对Active Directory进行一些更改(从组中添加/删除用户,更改用户的属性值,等等)。

我们现在正在重新设计它(从“意大利面条代码”到更分层的解决方案)。 Active Directory管理功能是我们想在域层中进行某种程度抽象的功能,但与此同时,大多数功能都与技术密切相关。

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

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

最佳答案

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

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

与其将其与数据库访问权限捆绑在一起,不如在其自己的库中实现它。从概念上讲,它属于同一层,但是它执行不同的操作,因此现在您在同一层中有两个库。绝对很好-您可以根据需要在每一层中拥有任意数量的库。

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

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

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

09-11 19:20