我经常发现属性可能太大。 有时感觉属性占用了屏幕而不是代码。 它可能使得很难找到方法名称。
此外,它们不可重复使用,因此您最终可能会重复使用这些值。
为了解决这个问题,我考虑创建自己的属性类,该类继承自必需的属性类 属性,只需将所有属性设置为我需要的默认值 但是,在大多数情况下,属性是密封的,从而阻止了我的计划。
大型属性有替代方法吗?
作为我正在谈论的一个随机例子:
[SoapDocumentMethod(
"http://services.acme.co.uk/account/Web/GetCustomerDetails/GetCustomerDetails",
RequestNamespace = "http://services.acme.co.uk/account/Web",
ResponseNamespace = "http://services.acme.co.uk/account/Web",
Use = SoapBindingUse.Literal,
ParameterStyle = SoapParameterStyle.Wrapped)]
public Response GetCustomerDetails(Request request)
{
//...
}
答案 0 :(得分:8)
虽然它无法解决您的所有问题,但您应该使用常量来表示重复值,尤其是字符串。
[SoapDocumentMethod(
URL, RequestNamespace = NAMESPACE, ResponseNamespace = NAMESPACE,
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public Response GetCustomerDetails(Request request)
{
//...
}
答案 1 :(得分:4)
从我的观点来看,有很多选择。
一个是代码生成。您可以使用T4引擎来读取某些配置文件并将某些属性应用于任意成员。
了解有关T4的更多信息 http://msdn.microsoft.com/en-us/library/ff697195.aspx
有时某些类是某个层次结构的一部分,您可以在抽象或虚拟成员中使用某个属性,因此覆盖这些属性的派生类不需要该属性,因为它已在基础成员中声明。
关于可读性,您可以使用区域来隐藏成员的属性。
无论如何,我建议你使用代码生成方法,因为它是最干净,最简单的解决方案。是的,这不是一个替代方案,因为你将拥有确切的代码,但你将避免手工完成。
最后,大多数.NET API和第三方API允许您使用属性或某些对象模型进行配置,因此,当您发现自己的代码充满了属性时,可能会做出一些事情。通过创建自己的配置模式并使用库的对象模型来配置您的环境。
修改的
我想补充一点,如果你喜欢代码生成方法,你可以使用自定义属性,当某些代码模板在某个文件上执行时,这些属性将被正确的属性替换。
该样本可能是:
[SomeFake]
public void A() {}
... and after code generation
[SomeActual(Allow = true, Loggable = true)]
public void A() {}
答案 2 :(得分:2)
将URL声明为其他地方定义的const字符串可能是一个开始
另外,谁说你在X字符后需要一个新行?只需拥有一长串代码,关心的人可以滚动阅读参数。