我正在试图找出更好/更清洁/更易维护的方法,以解决以下问题。我的“Customer”类是通过数据库中的LINQ生成的。客户有一个特殊的激活链接,这是一个需要从Customer实例和一些静态配置数据中生成的数据生成的URL。
解决方案1:使用GenerateActivationUrl()方法扩展部分Customer类,该方法将从其自己的实例获取数据并调用具有配置数据的静态类,然后呈现Url并将其作为字符串返回。
解决方案2:创建一个“LinkBuilder”静态助手类,它将Customer作为GenerateActivationUrl(客户客户)方法的参数,然后从客户实例获取所需的数据以及静态配置数据,然后返回Url as a string。
哪种解决方案更好,为什么?谢谢!
答案 0 :(得分:2)
“延伸”究竟是什么意思?遗产?扩展方法?
就个人而言,我会使用部分类(在同一名称空间中,但是与codegen不同的文件)将其作为属性公开:
namespace MyDalNamespace {
partial class Customer {
public string ActivationUrl {get {/* some code */ }}
}
}
这会直接将ActivationUrl
绑定为Customer
实例上的常规属性。
作为一个属性,它可以参与数据绑定(与扩展方法不同,它不能)。
如果你有做“选项2”(也许你没有访问DAL dll),那么扩展方法是合适的:
GenerateActivationUrl(this Customer customer) { ... } // note "this"