Подтвердить что ты не робот

Есть ли альтернатива большим беспорядочным атрибутам?

Я часто нахожу, что атрибуты могут быть слишком большими. Иногда кажется, что атрибуты занимают больше экрана, чем код. Это может затруднить определение имен методов.

Кроме того, они не могут использоваться повторно, поэтому вы можете в конечном итоге значительно увеличить свои ценности.

Чтобы противостоять этому, я подумал о создании моего собственного класса атрибутов, который наследуется от требуемого атрибут и просто устанавливает все свойства по умолчанию, которые мне нужны.
Однако в большинстве случаев атрибуты запечатываются, останавливаясь на моих схемах.

Есть ли альтернатива большим атрибутам?


Как случайный пример того, что я говорю:

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

Ответ 1

С моей точки зрения, есть много вариантов.

Можно было бы генерировать код. Вы можете использовать движок T4, чтобы прочитать некоторый файл конфигурации и применить некоторые атрибуты к произвольному члену.

Подробнее о T4 о http://msdn.microsoft.com/en-us/library/ff697195.aspx

Иногда какой-то класс является частью некоторой иерархии, и вы можете использовать какой-либо атрибут в абстрактном или виртуальном элементе, поэтому производные классы, переопределяющие их, не будут нуждаться в этом атрибуте, поскольку он уже объявлен в базовом элементе.

Что касается читаемости, вы можете использовать регионы, чтобы скрыть атрибуты участников.

В любом случае, я предлагаю вам подход к генерации кода, потому что это самое простое и простое решение. Правильно, это не альтернатива, потому что у вас будет точный код, но вы не будете делать это вручную.

Наконец, большинство API-интерфейсов .NET и сторонних устройств позволяют настраивать объекты с помощью атрибутов или с помощью какой-либо объектной модели, поэтому, возможно, когда вы обнаружите, что у вас есть код, полный атрибутов, некоторые вещи могут быть сделаны создав свою собственную схему конфигурации и используя объектную модель библиотеки, чтобы настроить вашу среду.

ИЗМЕНИТЬ

Я хочу добавить, что если вам нравится подход генерации кода, вы можете использовать пользовательские атрибуты, которые будут заменены правильными, когда какой-либо шаблон кода выполняется над некоторым файлом.

Образец этого может быть:

[SomeFake]
public void A() {}

... and after code generation

[SomeActual(Allow = true, Loggable = true)]
public void A() {}

Ответ 2

Пока он не решает все ваши проблемы, вы должны использовать константы для повторяющихся значений, особенно строк.

[SoapDocumentMethod(
    URL, RequestNamespace = NAMESPACE, ResponseNamespace = NAMESPACE, 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public Response GetCustomerDetails(Request request)
{
    //...
}

Ответ 3

Объявление URL-адресов как константных строк, определенных в другом месте, может быть начальным

Кроме того, кто сказал, что вам нужна новая строка после символов X? Просто у вас действительно длинная строка кода, и люди, которые ухаживают, могут прокручивать страницы, чтобы прочитать параметры.