是否有大杂乱属性的替代品?

时间:2011-05-19 10:57:17

标签: c# attributes

我经常发现属性可能太大。 有时感觉属性占用了屏幕而不是代码。 它可能使得很难找到方法名称。

此外,它们不可重复使用,因此您最终可能会重复使用这些值。

为了解决这个问题,我考虑创建自己的属性类,该类继承自必需的属性类 属性,只需将所有属性设置为我需要的默认值 但是,在大多数情况下,属性是密封的,从而阻止了我的计划。

大型属性有替代方法吗?


作为我正在谈论的一个随机例子:

[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)
{
    //...
}

3 个答案:

答案 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字符后需要一个新行?只需拥有一长串代码,关心的人可以滚动阅读参数。