当前位置: 首页 > 编程语言 > C#

接口编程,如何确定哪里需要它?分享

时间:2023-04-10 14:02:11 C#

编程到界面。如何确定哪里需要它?我知道针对接口编程有助于松散耦合。但是,是否有指南可以解释何时效果最佳?例如,我有一个简单的网络应用程序,它收集员工的数据、他们的培训计划、费用并计算他们一年的费用等。这是一个相当简单的应用程序,我当然可以使用一个界面,但想知道是否会有任何使用。我会为了使用它而使用它。总是可以说,随着应用程序的复杂性增加和我传递对象,传递类型(接口)比传递实现更有意义。那么,我应该等待应用程序变得复杂,还是立即使用它?我想知道最佳实践是否会变成“这家伙做得太过分了”。对接口进行编程的原因是为了将较高级别的类与对较低级别类的更改隔离开来。如果您根本不期望较低级别的类更改,那么在这种情况下不对接口进行编程是合理的。这篇文章(PDF)详细阐述了这个概念,创造了术语依赖倒置原则。如果您对测试驱动开发感兴趣,那么“针对接口编程”的需求就很明显了。如果你想测试一个类的依赖关系,你需要传递接口而不是对象。一个让我理解接口的简单例子是thisclassSimpleClass{publicintA{get;放;}publicintB{得到;放;}publicintC{得到;放;}}ListCalc(IEnumerablelist){foreach(SimpleClassiteminlist){item.C=item.A*item.C:}returnlist.ToList();}}请注意IEnumerable输入参数。通过使用它,我可以传入任何实现IEnumerable的集合作为in参数。列表、SimpleClass[]、集合。IEnumerable接口保证我可以使用foreach循环,这样我可以使我的函数更通用,并且由于IEnumerable比f.ex更不可能更改,所以我更改此代码的机会更少。列出更改。如果应用程序很有可能变得更复杂,那么设置脚手架会比以后更容易。但是,如果应用程序不复杂并且不太可能不变得复杂,则ROI可能不存在。您以后可以随时重构。在不打算交换实现的简单应用程序中对接口进行编程可能看起来有点矫枉过正。一旦进入单元测试,您将非常高兴能够以编程方式进行接口,因为它使您可以更轻松地使用测试替身模拟真实对象。您必须将接口视为合同。合同定义了一组规则和操作,无论以何种方式完成,都需要签署合同的人执行。我通常这样想——只有两件事将接口与实现分开:一个对象可以从许多接口继承,但只能从一个基类继承;接口不允许默认实现,而基类允许。现在考虑将从“结构”继承的对象。什么对他们更重要?他们是否会从该方法的默认实现中获益最多,或者如果他们可以有一些其他基类会更好吗?在大多数情况下,很明显哪个因素更重要。如果你碰巧在中间的细线上……运气不好。微软推荐基于接口的基类。如果您希望能够在不必使用(并且随后不必构建)完整的员工对象的情况下测试您的应用程序,您可以创建一个IEmployee接口,然后创建一个轻量级的测试友好的模拟员工对象用于测试目的。如果手动或没有数据库创建员工很困难甚至不可能,这可能是一个巨大的好处。另一个很好的理由是,它可以帮助您定义您在员工类别中完全依赖的内容。您可能认为您只使用了几个公共方法,但后来发现您使用了10个方法,而且它们比您想象的更紧密地耦合。最后,如果您需要更改代码以使用SuperEmployee而不是Employee,如果您一直在使用接口,那么您需要做的就是让SuperEmployee实现IEmployee,然后您就可以设置了。浏览Head-FirstDesignPatterns这本书……您会看到使用与TDD或多态性无关的接口的很好的论据。接口允许你在运行时改变一个对象的行为……想想你在什么地方需要一个特定行为的处理程序,但可能不知道在运行时需要什么行为。就员工开支而言……管理人员可能会享受比普通员工更高的“娱乐”开支。如果您的Employee对象引用了IExpenseCalculator接口,您可以在运行时将其分配给经理的计算器或员工的计算器。调用Employee.GetExpenses()将为经理提供与普通员工不同的计算。在内部,代码如下所示:publicclassEmployee{privateIExpenseCalculatorexpenses;publicExpenseSheetGetExpenses(){返回费用。CalcExpenses();此示例假定“费用”作为属性公开,并且IExpenseCalculator具有方法CalcExpenses()。接口也与对象工厂的概念密切相关……想想数据库层。一旦将数据层配置为工厂,就可以在运行时动态创建对象,以根据配置设置连接到SqlServer、Oracle或MySql。但是客户端需要数据库层对象的具体句柄……到接口中。接口是一种经??常被误用的强大工具。正确使用它们会改变您的思维方式,但可以极大地帮助您构建应用程序。对于API的任何部分,无论是外部客户端还是其他团队重用代码,都尽可能使用接口。这是值得的,因为它尽可能地向您的实现隐藏了您的实现如何工作,并让您在未来有更多的自由来增强它们。仅显示一个小的具体(可能是静态的)类,可以从中获取实例。对于设计的内部部分,您可以选择从任何地方的具体类引用开始,并且只引入对设计有意义的接口。但另一个需要考虑的重要事项是单元测试。您可以完全“模拟”CLR中的一个接口而没有技术上的困难,但是模拟其他东西要么是不可能的,要么需要一些严重的技巧。因此,要考虑的一个原则是测试驱动开发:当您的代码为您的代码编写测试时,您会发现您需要通过接口来表达某些东西,因此您可以提供它们的模拟版本。以上就是C#学习教程:编程到界面。如何确定哪里需要它?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: