【发布时间】:2010-07-09 06:39:55
【问题描述】:
说“某些”接口成员没有为某些类实现是很常见的,因为它们在某些情况下不适用,所以您在方法体中抛出一个未实现的错误是正确的吗?
例如,假设我创建了一个接口 IAPIAuthentication,该接口作为类合约的服务,这些类将执行对 3rd 方 API 的身份验证请求,例如 Facebook 和其他我们将在稍后实现的 API。
所以我的 IAPIAuthentication 接口可能具有以下属性:
// The URI that the auth HTTP Request will go to (minus any querystring values, this is just the base)
AuthenticationURI (property)
// unique ID for your API account with whatever API you are using (Facebook, Picasa, whatever)
ClientID (property)
// unique secret code also obtained when you sign up for an API account and used in auth calls
ClientSecret (property)
// a confirmation code sent back from the
AuthenticationVerificationCodeID (method)
// a boolean property set to true if an AuthenticationVerificationID was received back after an Auth request
AuthenticationWasSuccessful (property)
// sends the actual HTTP Request to the specified Uri
SendRequest()
好吧,在很多情况下,其他 API 在其身份验证过程中需要相同的信息(例如 PhotoBucket 等)
好的,所以我创建了这个接口,当我为这些 API 创建包装器时,该接口将用于各种实现,整个目的是在我开始使用一些我将在这里构建这些通用接口的包装器。这些是大多数 NVP API 的基本构建块,因此无论我正在实现什么 API 或我在此处创建的任何接口中至少 90% 的值,我在这些接口中放入的内容通常都会被使用。
所以我将创建一个类,例如实现该接口的 FacebookAuth。所有的发现和花花公子。好的,下次我在一个新项目上工作时,我说嘿,我还将实现该接口,使其符合创建第三方包装器项目的团队标准/模式)并且我知道我需要让我们说所有这些属性,但可能会减去一两个,因为该提供者在其身份验证过程中不需要该信息。可以说它只是一个不需要的。
所以我的问题是:
当我稍后开始创建所有这些 3rd 方 API 包装器项目时,我的方法是否对重用和一致性目标有意义?
一般而言,正如您所知道的那样,您可以通过在 .NET 中抛出一个未实现的异常来避免实现某个接口方法,如果有人试图在您的子类中使用该方法。我不确定属性...如果您绝对必须(罕见的一次性),您将如何忽略它们中的任何一个。那么,就所有成员将始终 100% 全面使用而言,期望您的界面永远不会“完美”是“正常的”吗?我的意思是可以说只放入将 100% 使用的元素。好的,但这取决于...因为在这种情况下,大多数情况下某些 API 将全部使用...只是一些一次性的不会...所以对我来说,包含一些可能不会使用的 API 仍然是有意义的在其他地方。
我只是想要一些基于经验的输入......在这一点上,在接口方面比我更有经验的开发人员。我没有太多使用接口..我知道它们是什么(合同,yada yada),但我试图找出它们的最佳用途,我真的认为这是一个很好的用途。我也会有抽象类......只有几个,所以我知道两者之间的区别。我只想知道可以这么说拥有不完美的接口是否可以接受。我想这就是他们版本 API 的原因吗?但即使在现有版本中,您也会有一些类不会完全实现接口的所有成员,但会实现该接口以实现一致性和重用,无论在您的应用程序或包装器中整体...
我希望我没有说太多。如果我不清楚,请告诉我。请记住,我上面的示例并不完整,但可以理解。
【问题讨论】:
-
我建议将其设为社区 wiki - 这不是一个有明确答案的问题。
-
哪些部分是不必要的?只是想知道因为我正在解释范围,使用示例以及与之相关的问题。对我而言,所有这些信息对于了解我的使用环境以及出现此类问题的原因至关重要。
-
我想我想知道,因为“不必要”与每个人对帖子的看法有关,我想你可以说
标签: c#