|
|
1
26
写界面“仅仅是因为”给我的印象是浪费时间和精力,更不用说违反了亲吻原则。 当它们实际上在表示相关类的公共行为方面很有用时,我就编写它们,而不仅仅是作为一个花哨的头文件。 |
|
2
12
不要过度设计你的系统。如果您发现您有几种类型的订单,并且认为为订单声明一个接口比在需要时重构它更合适。对于域模型,特定接口在开发的整个生命周期中变化很大的可能性很高,因此尽早编写接口很少有用。 |
|
|
3
8
接口是隔离组件以进行单元测试和一般依赖性管理的一种很好的方法。这就是说,我通常更喜欢抽象类,因此至少有一些常见的行为在那里被卸载了,而不是强迫接口带来一些重复。现代的IDE使生成接口变得快速和容易,因此它们不是 那个 大量工作: |
|
|
4
5
不,我只在域对象上使用接口来保持它们的松散耦合。对于我来说,用接口开发自己的代码的主要钩子是,在进行单元测试时,我可以轻松地创建mock。我不认为模拟域对象有什么意义,因为它们与服务层或DAO层类没有相同的依赖关系。 这当然并不意味着要偏离在域对象中使用接口的方向。在适当的地方使用。例如,最近我一直在开发一个webapp,其中不同类型的域对象对应于永久链接页面,用户可以在其中留言。因此,每个域对象现在都实现了“可注释”接口。然后,所有基于注释的代码都被编程到可注释的接口,而不是域对象。 |
|
|
5
5
实际上,这个问题是关于“针对接口编程”的常见误解的一个例子。 你看,这个 是 一个很好的原则,但确实如此 不 指的是很多人认为它意味着什么!
“程序到接口,而不是实现”(摘自《GoF手册》)仅仅意味着,而不是你应该走出去
创造
所有东西都有单独的接口。如果你有
在Joshua Bloch的“有效Java”书中,在“项目52:通过其接口引用对象”的原则中更清楚地表达了这一原理。它甚至用黑体字表示:
对于单元测试,情况完全取决于所使用的模拟工具的能力。用我自己的工具, JMockit 对于使用接口和依赖项注入的代码,我可以编写单元测试,就像对于使用从被测代码内部实例化的最终类的代码一样容易。 因此,对我来说,答案是:总是使用已经存在的接口,但是如果没有很好的理由这样做,就避免创建新的接口(和 可测试性 本身不应该是一个)。 |
|
|
6
4
|
|
|
7
2
在需要接口之前(无论是测试还是体系结构)编写接口是一种过虑。 此外,手动编写接口是浪费时间的。您可以使用Resharper的重构“拉成员”,让它在几秒钟内从特定类中创建新的接口。其他与IDE集成的重构工具也应该具有类似的功能。 |
|
|
8
1
我通常只在小项目中使用有意义的接口。但是,我最近的工作有一个大型项目,其中几乎每个域对象都有一个接口。这可能是杀伤力过大,而且确实很烦人,但是我们测试和使用Spring进行依赖注入的方式需要这样做。 |
|
|
9
1
我们主要使用Wicket、Spring和Hibernate编写Web应用程序,并使用SpringBeans的接口,例如服务和DAOS。对于这些类,接口是完全有意义的。但是我们也为每个域类使用接口,我认为这太过分了。 |
|
|
10
1
即使你很确定只有一个具体类型的模型对象,使用接口使嘲讽和测试变得更容易(但是现在有一些框架可以帮助你自动生成模拟类,甚至对于具体的Java类——Mockito,JTestR,施普灵河,Groovy……) 但我更经常使用服务接口,因为在测试过程中模拟接口更重要,而针对接口编程可以帮助您考虑封装之类的事情。 |
|
|
11
1
如果您使用域类进行单元测试,那么为域类编写接口是有意义的。我们在单元测试中使用模拟对象。因此,如果您有一个域对象的接口,而您的域对象本身还没有准备好,但是您的客户机可以通过模拟对象的帮助测试它对接口的使用。 intefaces还为您的域模型测试接口的多个实现。所以,我不认为这总是杀戮过度。 |
|
|
12
1
我认为针对接口编程的主要原因是可测试性。因此,对于域对象-只需坚持pojos或poc os:)等,也就是说,不要让类添加任何特定的框架,以防止它们与构建和运行时的依赖性不同,仅此而已。 不过,为DAOS创建接口是一个好主意。 |
|
|
13
1
我们从所有东西中提取接口,仅仅是因为它帮助测试(模拟)和AOP之类的东西。Eclipse可以自动执行此操作:重构->提取接口。 如果以后需要修改类,可以使用重构->上拉…将需要的方法拉到接口上。 |
|
|
14
1
*我这样做是因为我需要它来创建我的域对象的代理。 |
|
|
15
0
这是另一件需要记住的事情,我已经了解了,特别是对于生成的域和DAO对象。很多接口都太具体了。假设许多域对象都有一个ID和一个状态字段,为什么它们不共享一个公共接口?这导致了我的挫折,一个不必要的平坦(继承方面的)领域模型。 |
|
|
Aivengo · NS Cloudflare的变化 3 年前 |