在哪里放置技术具体的事情域模型?
-
18-09-2019 - |
题
我们有一个应用程序,与许多事情一起,做一些变化到Active Directory(添加/从组中删除用户,改变属性的用户的值,等等)。
我们现在是重新设计它(从“意大利面条代码”成更层状溶液)的处理。活动目录管理功能,是我们想抽象出某种程度的领域层,但在同一时间,大部分功能都非常依赖于技术。
如果我们把数据访问层中的所有Active Directory访问代码与我们的DB-访问一起,还是确定以创建功能的活动目录库,直接从领域模型调用到这个库?这使得域对象持久意识到那可能是一个坏主意?
或者应该将要在服务层来代替,而不是执行所有的Active Directory访问,甚至涉及到领域层?
解决方案
域模型应该是与技术无关,所以不要把您的广告代码的域模型。
在本质可以说,AD码是数据访问的另一种形式,因此它属于在数据访问的层(DAL)。但是,它不与您一同数据库模块属于,因为这是违反了单一职责原则。(SRP - 它适用于模块以及个别类型)
除了与数据库访问一起捆绑它,实现它在自己的图书馆。从概念上讲,它属于在同一层,但它不同的事情,所以现在你在同一层两个库。那是绝对没问题 - 你可以有许多库在每一层,因为你需要
在领域模型,治疗AD访问(和DB访问)作为抽象。抽象的存储库强>是默认方法。该AD文库将包含AD库的实施方式中,和DB库将包含DB存储库的实施方式。
此与领域驱动设计的概念非常适合的反腐败层强>
您可以使用依赖注入(DI)接线水泥库与你的域模型。
其他提示
我觉得技术特有的东西都实现细节,不应该被放在域模型。
不隶属于 StackOverflow