Есть ли Причины Не использовать пользовательские атрибуты?

StackOverflow https://stackoverflow.com/questions/1528090

Вопрос

В основном это просьба о комментариях, если есть причина, по которой я должен не идите по этой дороге.

У меня есть многоуровневое приложение, созданное CodeSmith.На уровне пользовательского интерфейса должны быть некоторые обязательные поля, и обязательные поля будут варьироваться в зависимости от значений полей в привязанном объекте.То, что я собираюсь сделать, - это добавить пользовательский атрибут "PropertyRequired" к каждому свойству в сущностях, для которого я могу установить значение true или false при загрузке сущности в ее менеджер.Затем я буду использовать отражение для запроса свойства и предоставления визуальной обратной связи пользователю на уровне пользовательского интерфейса, и я смогу проверить, что все требуемые свойства имеют допустимое значение в диспетчере перед сохранением.Я разработал это как доказательство концепции с одним свойством в одном объекте, но прежде чем я попытаюсь распространить это на остальную часть приложения, я хотел бы спросить, есть ли кто-нибудь с большим опытом, кто либо посоветовал бы мне пойти на это, или почему мне это не понравится при расширении.Если это плохая идея или если вы можете предложить лучший подход, пожалуйста, выскажите свое мнение.

Это было полезно?

Решение

Это довольно разумный способ сделать это (я делал что-то очень похожее раньше), но есть всегда недостатки:

  • любому коду, нуждающемуся в объекте, потребуется дополнительная ссылка (при условии, что атрибут и объект находятся в разных сборках)
  • значения (если вы не разбираетесь в этом с умом) должны быть определены во время компиляции
  • вы не можете использовать его на объектах, находящихся вне вашего контроля

В большинстве случаев вышеперечисленное не является проблемой.Если они являются проблема, возможно, вам захочется поддерживать внешнюю модель метаданных, но если не вам это нужно, это было бы излишеством.Не делайте этого без крайней необходимости (имеется в виду:идите дальше и используйте атрибуты;они такие обычно прекрасно).

Другие советы

Нет никакой внутренней причины избегать пользовательских атрибутов.Это поддерживаемая функция CLR, которая является основой для многих доступных продуктов (Code Contracts, FxCop и т.д.).

Это не такой уж неразумный подход и полезнее, чем запекать этот материал на уровне пользовательского интерфейса.Есть пара моментов, которые стоит обдумать, прежде чем совершать полное погружение:

  • Вы тесно связываете бизнес-логику с самим бизнес-объектом.Существуют ли обстоятельства, при которых поле является обязательным или допустимые значения могут измениться?Возможно, вы ограничиваете себя или сталкиваетесь с несогласованным механизмом проверки
  • Динамическое назначение возможно, но более сложно , т. е.когда вы устанавливаете обязательность поля, это то, чем оно будет, если вы не переопределите
  • Пользовательские атрибуты могут быть довольно негибкими, если в дальнейшем вы захотите сделать что-то более сложное, а именно, если вам нужно передать состояние в схему проверки, основанную на атрибутах.Атрибуты, такие как декларативное присвоение.Однако здесь не должно быть проблемой только наличие требуемого свойства true / false

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top