gpt4 book ai didi

design-patterns - 使用与域实体的一对一接口(interface)是好的还是坏的做法?为什么?

转载 作者:行者123 更新时间:2023-12-03 10:28:16 25 4
gpt4 key购买 nike

我在我从事的一些 DDD 企业应用程序中看到的一件事是使用与域实体相同的接口(interface),具有属性和功能的一对一映射。实际上,域对象总是通过它的一对一接口(interface)使用,并且所有域实体都具有这种风格的一对一接口(interface)。

例如:

域对象帐户:

public class Account : IAccount
{
public string Name {get;set;}
//...some more fields that are also in IAccount
public decimal Balance {get;set;}
}

和它的匹配界面
public interface IAccount
{
string Name {get;set;}
//... all the fields in Account
decimal Balance {get;set;}
}

但最近我越来越相信这实际上是一种反模式。
我由开源社区的一些架构师运行它,他们说这是基于设计错误或缺陷,位于设计链的某个位置。

所以我告诉我的同事,他们应该停止为域对象创建接口(interface)。因为它们没有任何用途,并且每当您更新域实体时,您都必须更新界面。

首先声称这些接口(interface)提供了“解耦”,但我反驳说,由于接口(interface)与域实体具有一对一的关系,因此它们并没有真正提供任何解耦,对接口(interface)的更改意味着在域实体,反之亦然。

下一个声明是我们需要这些接口(interface)来进行测试。我的反驳是 Rhino-mocks 提供了具体类的模拟和 stub 。但他们声称 Rhino-mocks 在具体类方面存在问题。我不知道我是否买了它,即使 rhino-mocks 在具体类方面有问题,但这并不一定意味着我们应该为域实体使用接口(interface)。

所以我很好奇:

为什么要为您的域实体提供一对一的接口(interface)?

为什么不?

为什么这是一个好的或坏的做法?

谢谢阅读!

编辑 : 我应该注意到我一直都在使用接口(interface),并且我相信如果需要,我会立即使用接口(interface)。但我特别指的是具有一对一接口(interface)的域实体。

最佳答案

如上所述,这是一种不好的做法,但是...

您的接口(interface)需要与域实体不同,这并没有什么特别的原因;有时它确实是正确的映射。但令人怀疑的是,情况总是如此。值得关注的问题是界面是否真正设计,或者它们是否只是因为缺乏时间/懒惰而被放置到位。

使用您的示例,您描述的 IAccount 接口(interface)在 Account 对象上公开了 getter 和 setter;使用帐户的所有东西都需要设置帐户余额,并且在该接口(interface)级别指定隐含权限,这似乎有点奇怪且不太可能。您的系统中是否没有您只想检查但不设置帐户余额的地方?

关于design-patterns - 使用与域实体的一对一接口(interface)是好的还是坏的做法?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/825919/

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