【发布时间】:2009-12-25 20:55:04
【问题描述】:
我正在将我的所有参数、返回类型、类转换为全部使用接口,即。 IUser 而不是 User。
除了维护它所需的额外代码之外,他们对这种方法有什么负面影响吗?
【问题讨论】:
我正在将我的所有参数、返回类型、类转换为全部使用接口,即。 IUser 而不是 User。
除了维护它所需的额外代码之外,他们对这种方法有什么负面影响吗?
【问题讨论】:
这不是一种不常见的方法,尤其是在您进行大量嘲笑的情况下;但是,它存在以下问题:
您需要弄清楚模拟等的优势是否超过了这些问题。您可能在大多数情况下使用IUser,但(例如)在通信层使用原始 DTO 而不是接口可能更简单。
请注意,我将上述内容应用于课程。如果您涉及结构,请记住,在大多数情况下,这也将涉及装箱。
【讨论】:
总体而言,这将为您提供与松耦合相关的所有优势,所以总的来说,我认为这是一个巨大的胜利。不过,既然你问了缺点,我能想到的还有一些小缺点:
【讨论】:
我曾经经历过这个阶段,但在实践中发现,对于贫血的数据对象(即 POCO),不需要接口。
在实践中,使用接口来定义行为契约可能很有用,但不一定要定义属性。
一般来说,我建议您让单元测试指导您。如果您在整个应用程序中都有丰富的对象,那么您很可能需要接口。如果您有 POCO,您很可能只需要它们用于控制器样式的类。
【讨论】:
接口是非常好的东西,但是将它们应用于所有工件是大材小用的。特别是在java中,你最终会得到两个不同的文件(接口+实现)。所以(一如既往),这真的取决于:)
我以前也使用 Ixxx 前缀,但我(很高兴)现在摆脱了它,原因如下:
【讨论】:
与其说是缺点,不如说是一个警告。您会发现要实现良好的组件解耦,您需要使用依赖注入框架(也就是说,如果您想保持理智并了解您的接口映射到什么)。
还容易发生的情况是,非平凡的类有时会自然地转换为多个接口。当您拥有公共静态方法(即User.CreateAdminUser)时尤其如此。您还会发现让界面保持状态并做事变得更加困难。界面通常是其中之一更自然。
如果您在此过程中遇到困难,请花一点时间研究一下您尝试实施的合适范式。可能有人以前解决过这种特定的设计模式。考虑到这是一项大型的重构工作,您不妨多花点时间好好地完成它。
【讨论】:
避免使用ISuck 前缀。
编辑:ISuck 约定是应用于类型名称的Systems Hungarian 表示法的体现。
【讨论】: