gpt4 book ai didi

c# - 在域模型中的什么地方放置技术特定的东西?

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:37 25 4
gpt4 key购买 nike

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

我们现在正在对其进行重新设计(从“意大利面条式代码”转变为更加分层的解决方案)。 Active Directory 管理功能是我们想在域层中某种程度上抽象出来的东西,但与此同时,大多数功能都非常依赖技术。

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

或者所有的 Active Directory 访问都应该在服务层执行,甚至不涉及域层?

最佳答案

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

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

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

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

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

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

关于c# - 在域模型中的什么地方放置技术特定的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com