是否应在域或服务层中定义DTO接口?

时间:2019-02-08 23:51:13

标签: c# interface service-layer

我希望广告发布者将通用接口传递给购物车服务。我读过,接口应该在域层中,而DTO应该在服务层中定义,这似乎与我冲突。您不希望Domain层引用定义DTO的Service层。

我想念什么?还是可以像我在图中那样在服务层中将接口与DTO一起使用?

enter image description here

1 个答案:

答案 0 :(得分:0)

因此,如果您使用分层体系结构模式(我想是的),则应考虑该模式的一个基本属性。此属性表示不同层中的模块(类)之间“使用”依赖关系的特定顺序,特别是来自某一层的模块应“使用”(依赖)来自下一个或多个底层的模块或抽象。我提到层是因为可以有一些宽松的约束,这些约束不仅允许使用来自最近的基础层的类,还可以使用给定层之下的所有层。至于向上的依赖关系,约束是非常严格和明确的-不允许它,否则它不是分层体系结构,而是其他一些东西,因为它消除了分层体系结构应该带来的质量属性。逻辑上的结果-在域层内部的服务层使用DTO意味着向上依赖性,这违反了分层体系结构约束。

对于接口,分层体系结构的另一个基本属性是应通过抽象将各层彼此隔离。这里的抽象可能暗示一些公共协议(API,接口等),这些公共协议定义了更高层次的意图和更低层次的期望,但仅此而已,从可修改性和可移植性的角度来看,这使得分层体系结构如此有吸引力。这就是为什么我们在讨论所有层中的接口,它们只是一种抽象机制。

现在作为结论:如果您的DTO在服务层中,则它们应属于同一层(某些情况下为上一层)的合同的一部分,但不应低于下层,以便排除层之间的向上依赖性。这些接口对于域层以及出于抽象目的的任何其他层仍然有效(甚至是理想的)。

相关问题