我正在将所有参数,返回类型,类转换为所有使用接口,即。 IUser而不是User。
除了维持这个所需的额外代码之外,他们对这种方法有任何负面影响吗?
答案 0 :(得分:3)
这不是一种不常见的方法,特别是如果你做了很多嘲笑;但它有问题:
您需要弄清楚模拟等的优势是否超过这些问题。可能是您在大多数情况下使用IUser
,但(例如)在通信层,使用原始DTO而不是接口可能更简单。
请注意,我将上述内容应用于课程。如果您涉及结构,那么请记住,在大多数情况下,这也将涉及拳击。
答案 1 :(得分:3)
总的来说,这将为您提供与松耦合相关的所有优势,因此总的来说,我认为这是一个巨大的胜利。但是,既然你问了一些不利因素,我可以想到一些小问题:
答案 2 :(得分:2)
我曾经历过一个阶段,但实际上发现,对于贫血的数据对象(即POCO),不需要接口。
在实践中,使用接口来定义行为合约可能很有用,但不一定是属性。
一般情况下,我建议您让您的单元测试指导您。如果您的应用程序中有丰富的对象,那么您很可能需要接口。如果你有POCO,你很可能只需要它们用于控制器式的类。
答案 3 :(得分:1)
接口是非常好的,但将它们应用于所有工件是过度的。特别是在java中,你最终会得到两个不同的文件(接口+实现)。所以(一如既往),它真的取决于:)
我还习惯使用Ixxx前缀,但我(很高兴)现在摆脱了它,原因如下:
答案 4 :(得分:1)
不是缺点而是警告。你会发现为了实现良好的组件去耦,你需要使用一个依赖注入框架(即如果你想保持理智并且知道你的接口映射到什么)。
往往会发生的是,非平凡的类有时会自然地转换为多个接口。当您使用公共静态方法(即User.CreateAdminUser
)时尤其如此。您还会发现,获取状态AND 执行内容的界面更难。接口通常更自然是一个或另一个。
如果您陷入困境,请花一点时间研究一下您正在尝试实施的适当范例。有可能之前有人解决了这种特殊的设计模式。考虑到这是一项重要的重构工作,您可能需要花费额外的时间并正确地完成它。
答案 5 :(得分:-2)
避免使用ISuck
前缀。
编辑:ISuck
约定是应用于类型名称的Systems Hungarian表示法的表现形式。