我只是调查一个使用nHibernate的现有项目的源代码,发现为每个实体类都创建了接口。例如ICustomer for Customer class。我只是想知道这种模式的优点是什么,因为ICustomer主要包含属性和很少的方法。为每个域对象创建一个接口是一个好主意吗?
2
A
回答
9
我会说不。接口将行为与实现分开,以便后者可以在不影响接口的客户端的情况下被换出。
如果您的域对象不需要不同的实现,我不会看到接口的需要。只有在需要动态代理生成或方面或更改实现时才引入它们。
1
我不同意前面的评论......虽然与控制反转(IoC)和依赖注入等模式相结合,但它使得彼此之间的隔离更容易。这简化了单元测试,模拟,并且还可以导致更松散耦合的体系结构。这仍然可以在没有接口的情况下实现,尽管你需要确保你没有封闭你的类并使得成员是虚拟的,这样你仍然可以模拟,生成可以接受的代理等等。最后,使用接口迫使你放弃与任何有关的假设一个具体的实现,而是侧重于接口定义所代表的契约。
相关问题
- 1. 设置视口每一帧都是一个好主意吗?
- 2. 给自己分配一个对象是个好主意吗?
- 3. 创建Exception作为内部类是一个好主意吗? C++
- 4. 在Python接口中定义属性是一个好主意吗?
- 5. 这是设计一个好主意 - 接口和抽象类
- 6. 当Path是一个接口时创建一个路径对象?
- 7. 我应该为每个模型创建一个接口吗?
- 8. 重新使用ADO.NET命令对象是一个好主意吗?
- 9. AS3添加和删除对象,这是一个好主意吗?
- 10. 创建'太多'类是一个好主意吗?
- 11. 创建数据库包装不是一个好主意吗?
- 12. 重新创建Win32头文件是一个好主意吗?
- 13. 每个文件的php对象都是好主意吗?
- 14. django:是@csrf_exempt一个好主意吗?
- 15. 聚合ViewModels是一个好主意吗?
- 16. 在每个viewmodel有一个serviceclient实例是一个好主意吗?
- 17. 有一个服务只是为了注册意图是一个好主意吗?
- 18. 将mysql连接设置为静态是一个好主意吗?
- 19. 在Javascript中是一个异步类是一个好主意吗?
- 20. 从Managed C++中的BSTR创建一个System :: String对象 - 这是一个好主意吗?
- 21. MSMQ是一个好主意
- 22. 我应该每次创建一个新对象还是创建一个对象?
- 23. .NET UnitOfWork作为一个静态类 - 这是个好主意吗?
- 24. 为每个用户使用SqlCacheDependency是个好主意吗?
- 25. 用一对索引STL映射是一个好主意吗?
- 26. 是一个抽象的CRUD控制器是一个好主意吗?
- 27. 为每个用户创建一个文件夹的不好主意?
- 28. 缓存javax.sql.Datasource对象的单个实例是个好主意吗?
- 29. 创建一个自定义的PrincipalPermission属性是个好主意吗?
- 30. 我可以为一次对象的每个属性定义一个接口吗?
+1因为它太容易在各处使用接口。话虽如此,如果您需要在任何地方使用“极少数方法”,或者如果Customer对象的构造函数执行任何业务规则,请准备好提取接口。你不想创建一个有效的具体的客户实例,只是为了单元测试其他类。 – 2010-05-11 15:35:49
接口对版本控制问题也是臭名昭着的。如果你没有特别需要定义一个接口,不要。 – Will 2010-05-11 15:57:28