实体应该实现接口吗?我个人没有我的实体实现接口。对于Task类,我不会让ITask在其上定义相同的属性。我已经看过几次了,所以我想知道这个建议是从哪里来的,以及您从中得到了什么好处。如果您使用的是ORM,那么说“我可以更改我的数据访问权限”的说法是无关紧要的,那么还有什么其他原因呢?更新:关于INotifyPropertyChanged的??评论中提出了一个很好的观点。这不是我的观点——我在谈论这样的事情:publicinterfaceITask{intId{get;放;}字符串描述{得到;放;}}publicclassTask:ITask{publicintId{get;放;}公共字符串描述{得到;放;我一直在这条路上(价值对象的接口)。这是幕后的皇家痛苦,我建议不要这样做。它的共同论点是:Mocks:它们是值对象。没有嘲笑。除了编写构建器(在Java中)或在C#中使用命名参数之外,模拟最终成为一个很大的痛苦。只读视图:我必须承认,我仍然宁愿创建一些默认情况下不可变的东西,并且只在绝对必要时才使其可变。隐藏特性:一般情况下,范围已经涵盖了这一项。这样做的主要好处是,它是一种将您的实体公开为“只读”版本的方式(当然,只要您的界面不公开setter)。我们正在做相当多的单元测试,所以经常想模拟我们没有测试的东西。虽然我不喜欢它,但我们最终都使用了各种接口,因为它使模拟事情变得容易得多。理论上,大多数模拟框架也可以模拟普通类,但在实践中这会给我们带来问题,因为我们有时会用反射做一些聪明的事情,而模拟类与原始类的类型不同。这样做:varmyTask=MyIoCProvider.Get();vartaskType=typeof(myTask);是不可预测的。给定:varmyTask=MyIoCProvider.Get();vartaskType=typeof(myTask);给你一个绝对派生自ITask的taskType。所以接口只是给了我们一种让我们的系统更可模拟的方法。如果你正在考虑使用DomainEvents而不是数据结构,比如任务确实需要实现一个接口publicinterfaceIDomainEvent{GuidEventId{get;}GuidTriggeredByEvent{得到;}日期时间创建{get;}}publicclassOrderCancelledEvent:IDomainEvent{GuidEventId{get;放;}GuidTriggeredByEvent{得到;放;}日期时间创建{get;放;}//现在对于特定位intOrderId{get;放;}}或类似的,如果你有一个公共数据访问层,可能需要接受IEntity的标准基类,但如果它只是你在帖子中描述的数据结构,我没有每种类型的接口。当您处理实际暴露行为的域对象时,您可能希望拥有用于单元测试的接口。以上是C#学习教程:实体是否应该实现接口?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
