.NET-我们可以通过界面进行交互吗?何时不应该进行界面交互?
是否可以通过接口?现在,当设计系统时,我将从接口开始,并逐步将单元测试与接口一起编写,直到有一个运行良好的模式为止。.我将继续编写一些具体的类并针对这些设置单元测试。
现在我是一个热爱接口的人,通常,在我控制代码时,我通常只会遍历/返回原语或者接口。.到目前为止,我发现这是理想的,我们可以轻松地适应和增强系统而不影响从属系统。
我显然不需要出售使用接口的原因,但是我想知道它是否过分地连接所有东西,ps。我不是在谈论空白接口,就像在疯狂地这样:
interface IStringCollection : ICollection<string> { }
我在说更多类似的东西:
interface ISomethingProvider { ISomething Provide(ISomethingOptions options); }
这真的是最重要的吗?我的理由是,在某种程度上,任何类型都可以从接口中受益。.我唯一真正的问题是,我不得不学习我认为是更好的设计类的方法,因为你没有傻瓜互动和"骇客"之行。
很高兴收到我们关于这是否是定时炸弹以及何时决定接口与否的反馈。
psthis其实与如何编写接口无关。
解决方案
瑞士瑞士军刀!
咨询此:
http://thedailywtf.com/Articles/Classic-WTF-Implements-ISwissArmyKnife.aspx
如果我们到处都有接口,那么在步入调试器之前计算出最终的调用堆栈可能会非常痛苦。我倾向于只在以下情况下才喜欢使用接口:
- 我们需要团队成员在开始编码之前就应该由谁做的事情达成协议-一个界面,然后准确记录边界
- 当我们实际上需要一个接口来解决问题时,因此至少有两个彼此不扩展的实现
- 我们预期情况2
我发现界面使设计变得复杂,尤其是对于其他人来说,在东西上进行协作。不要误会我的意思,接口对于很多东西来说都是很棒的,但是大多数情况下,如果我们希望两个或者多个类共享一个公共接口。
如果我们发现自己突然需要接口,可以使用Resharper之类的工具进行重构:)
与其他任何东西一起使用,并在必要时使用。问问自己"我们是否需要它?"。
接口描述了行为契约。如果我们需要根据行为模式来处理一组对象,那么接口就很有用,如果我们只是在描述对象的结构,那么接口就没什么用了。我认为我们需要有充分的理由来使用它们,例如使用创建行为相关对象的工厂或者为库的一部分建立行为契约。漫无目的地使用接口会使图书馆难以阅读/理解/维护。
这不仅仅是一个.NET事情,在Java中经常会发生相同的问题。
除非它是一个完全显而易见的要求,否则我投票赞成不使用接口,而是在需要明确时才进行重构。
务实的方法表示只做可能可行的最简单的事情,而不会陷入建筑航天领域。
简而言之,可以跨项目接口。考虑到情况确实需要抽象基类和接口的情况,尽管两者都相似,但同时使用"参见此处"有明显的优势。通常,我注意到人们在真正应该使用Abstract Base Classes时使用了Interfaces。从OO角度看,应该使用接口来列出可能跨越非常不同的类的常见行为。例如,我们可能有一个带有名为Move()的方法的IMove接口。现在,假设我们有一个飞机,汽车,人和昆虫类。飞机和汽车可能从抽象的汽车类继承而来,但仍需要使用IMove,昆虫和人也将使用,但它们都将以不同的方式实现移动。我注意到,包括我自己在内,人们倾向于使用接口将类真正分组,而实际上这应该由基类处理。
我倾向于不使用太多接口进行测试。在构建和测试之前,我宁愿公开和/或者开启类和/或者临时方法的私有价值,直到我构建其他对象和测试的地步,这些对象和测试最终将满足我的需要。有点麻烦以这种方式进行更改,但是当我们忘记更改某些内容时,测试会告诉我们。
可能会过度接口。我工作的规则是,如果应用程序中有一个接口,则需要至少有两个实现该接口的类(或者有合理的期望,我们将在不久的将来添加实现类)。
如果我们需要创建模拟对象进行测试,那么让模拟类和真实类实现一个公共接口是使用接口的有效理由。
我不建议我们为应用程序中的所有内容自动使用接口,特别是因为如果需要,通常可以轻松地将单个类重构为接口。
每当我看到或者听到有人说这个
Interfaces describe a contract for behavior
我知道我找到了一个不了解界面的人。
接口无法做到这一点。是不可能的。接口不规定,强制或者以任何方式限制行为。
接口描述了接口的约定,因此也称为名称。他们没有行为。
我们可能希望我们为接口的方法提供的名称对实现它的任何人都意味着必需的行为,但是并不需要这样做。没有行为契约,也没有行为契约。
如果我们需要某种类型的行为,则必须使用类来强制执行(例如,使用"模板"模式)所有行为所在的地方。
经常将接口用作设计构造,原因之一是因为人们普遍相信这种谬论。