所以我会尝试在这个问题上唱反调...
假设有一个框架为 2 或 3 个不同的网站提供服务。 1框架的基本功能是处理对某个DB的所有调用。当进行数据库调用时,网站调用框架数据源对象并取回通用框架数据对象。
现在,对于网站检索特定于其需求的属性/方法,我们有 2 个解决方案选项。
创建一个新类,扩展或包装通用数据对象, 公开更多域友好属性并保留任何域 这个新类中的特定功能。
不是创建新类,而是在框架内创建扩展方法来为每个网站提供服务。所以一切都是 包含在框架内,可以在网站之间共享 如果需要 1 天。
只是为了澄清这里将是例子: 属性:
- NewObject.GetSiteSpecificProperty
- GenericObject.GetProperty("GetSiteSpecificProperty") 或 GenericObject.GetSiteSpecificProperty()
方法
- NewObject.DoSomethingSpecificToThisWebsite()
- GenericObject.DoSomethingSpecificToThisWebsite()
那么您会选择哪种解决方案? 1 个还是 2 个?
干杯。
最佳答案
在我看来,在设计框架时,您希望将尽可能多的解决方案特定方面保留在框架之外,并尽可能让调用实体处理这些方面。
现在我不太确定您的框架将如何使用或有多少不同的网站\项目使用,但使用选项 (2) 意味着现在无论何时添加新网站,框架现在都需要按顺序工作来完成这个功能。以自定义方式使用框架的工作应该由网站而不是框架来处理。如果这个框架增长到使用 10 个甚至 100 个网站,这将成为维护的绝对噩梦,你的框架最终看起来更不像一个框架,更像是一个特定于解决方案的产品。使用 (1) 是一个更简洁的解决方案。基本上尽可能保持您的框架可重用和与解决方案无关。
如果你正在设计一个将被许多不同项目使用的框架,并且被设计为存在一段时间,我建议你阅读 Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition)
关于c# - 最佳解决方案 : Extension Methods or a New Class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732008/