我们有一个应用程序,与许多事情一起,做一些变化到Active Directory(添加/从组中删除用户,改变属性的用户的值,等等)。

我们现在是重新设计它(从“意大利面条代码”成更层状溶液)的处理。活动目录管理功能,是我们想抽象出某种程度的领域层,但在同一时间,大部分功能都非常依赖于技术。

如果我们把数据访问层中的所有Active Directory访问代码与我们的DB-访问一起,还是确定以创建功能的活动目录库,直接从领域模型调用到这个库?这使得域对象持久意识到那可能是一个坏主意?

或者应该将要在服务层来代替,而不是执行所有的Active Directory访问,甚至涉及到领域层?

有帮助吗?

解决方案

域模型应该是与技术无关,所以不要把您的广告代码的域模型。

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

除了与数据库访问一起捆绑它,实现它在自己的图书馆。从概念上讲,它属于在同一层,但它不同的事情,所以现在你在同一层两个库。那是绝对没问题 - 你可以有许多库在每一层,因为你需要

在领域模型,治疗AD访问(和DB访问)作为抽象。抽象的存储库是默认方法。该AD文库将包含AD库的实施方式中,和DB库将包含DB存储库的实施方式。

此与领域驱动设计的概念非常适合的反腐败层

您可以使用依赖注入(DI)接线水泥库与你的域模型。

其他提示

我觉得技术特有的东西都实现细节,不应该被放在域模型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top