c# - 最佳解决方案 : Extension Methods or a New Class?

标签 c# .net

所以我会尝试在这个问题上唱反调...

假设有一个框架为 2 或 3 个不同的网站提供服务。 1框架的基本功能是处理对某个DB的所有调用。当进行数据库调用时,网站调用框架数据源对象并取回通用框架数据对象。

现在,对于网站检索特定于其需求的属性/方法,我们有 2 个解决方案选项。

  1. 创建一个新类,扩展或包装通用数据对象, 公开更多域友好属性并保留任何域 这个新类中的特定功能。

  2. 不是创建新类,而是在框架内创建扩展方法来为每个网站提供服务。所以一切都是 包含在框架内,可以在网站之间共享 如果需要 1 天。

只是为了澄清这里将是例子: 属性:

  1. NewObject.GetSiteSpecificProperty
  2. GenericObject.GetProperty("GetSiteSpecificProperty") 或 GenericObject.GetSiteSpecificProperty()

方法

  1. NewObject.DoSomethingSpecificToThisWebsite()
  2. 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/

相关文章:

.net - CryptoStream 和经过身份验证的加密模式

c# - WPF DataGrid ItemsSource 绑定(bind)到 ObservableCollection 不会更新超出第一个设置?

c# - 如何从引用其他程序集的命令提示符编译 C# DLL?

C# GUI 编程入门

c# - EF 代码首先使用空查找表设置外键

c# - 替换 XElement 中的元素会中断 foreach 循环

c# - System.Drawing.Image.FromStream() 内存不足异常

c# - C#'s equivalent to Python' s os.path.splitext()?

c# - 通用类和接口(interface)的非通用版本

c# - 未找到具有不变名称 'System.Data.SqlClient' 的 ADO.NET 提供程序的 Entity Framework 提供程序。