Зачем мне использовать Reflection в бизнес-приложении? - PullRequest
6 голосов
/ 13 января 2009

Я знаю, что такое Reflection, но зачем мне использовать его в типичном бизнес-приложении Winforms?

Ответы [ 13 ]

11 голосов
/ 13 января 2009

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

Мы также широко используем отражение в Factory Pattern. Методы создания объектов могут быть помечены с помощью атрибутов, которые найдены с отражением, а затем созданы нашей фабрикой.

Фактически, любое использование атрибутов использует отражение. Если вы создадите свои собственные атрибуты, вы будете использовать отражение, чтобы найти их в своем коде.

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

4 голосов
/ 13 января 2009

Отражение может помочь вам написать больше обслуживаемого кода и уменьшить количество кода для какой-то конкретной задачи.

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

2 голосов
/ 13 января 2009

Я определил атрибут DisplayName для моего Enum, поэтому вы заканчиваете:

перечисление { [Отображаемое_имя ( "Открытый") открыть, [DisplayName («Запрос предложения») Объявление

}

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

Я буду использовать отражение, если захочу обработать что-нибудь на основе его типа. Так что, если я прошел Тип A, идите налево, иначе идите направо.

2 голосов
/ 13 января 2009

Другое распространенное использование для отражения - сериализация. .Net использует отражение для поиска информации о типах при сериализации объектов. Бизнес-приложение может захотеть предоставить пользовательскую функцию импорта / экспорта данных, и сериализация с помощью отражения - один из способов сделать это.

2 голосов
/ 13 января 2009

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

  • Тестирование частных методов в модульных тестах.

  • Использование его для динамической сортировки с использованием linq, когда доступно только имя свойства.

  • Заполните свойство объекта на лету. Возможно, потому что вы сопоставляете свойство с именем столбца datarow или, может быть, и элементом xml. (Может быть устаревшим использованием)

  • Создание класса на лету.

1 голос
/ 14 января 2009

Вот лишь некоторые из множества образцов:

  • Автоматическое обнаружение и загрузка компонентов и услуг в рамках .NET-инверсии контейнера управления, которую мы используем с .NET отражение
  • Обеспечение конструктивных ограничений в коде (т.е. "Все классы в пространстве имен модели должны быть неизменяемыми и сериализуемыми") с отражением на основе Cecil ( sample )
  • Добавьте проверки правильности и проверки в код, чтобы сделать его более стабильным с помощью помощников, реализованных с помощью отражения на основе IL ( sample ).
  • Привязка элементов управления пользовательского интерфейса и поставщиков ошибок к бизнес-объектам и бизнес-правилам с отражением .NET на основе выражений Linq ( sample ).
1 голос
/ 13 января 2009

Предполагая, что под "бизнес-приложением" вы подразумеваете "простое приложение CRUD", вы определили область достаточно узко, так что вам, вероятно, не понадобится рефлексия, чтобы заставить ее работать - или даже чтобы сделать ее лучше

рефлексия делает язык "закрытым" в том смысле, что операторы в языке могут использоваться для исследования операторов в языке; сопоставьте это с языком C, который не имеет отражения. Хотите вызвать функцию по имени в C? Не могу, нет отражения.

Нужно ли это делать типичному приложению C? Нет или редко.

Аналогично на ваш вопрос "Зачем мне использовать Reflection в бизнес-приложении?" ответ в том, что вы , вероятно, не будут, в то время как другие могут умело использовать его, но на самом деле для базовых приложений CRUD это не «необходимо».

это не значит, что вы не должны этого понимать; Знание того, что это такое и что он может сделать, может означать разницу между написанием тонны хрупкого кода или небольшого элегантного рефлексивного кода в случае, если вы когда-нибудь столкнетесь с чем-то более сложным или сложным, чем «линейка бизнес-приложений» ;-)

1 голос
/ 13 января 2009

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

1 голос
/ 13 января 2009

Вы можете динамически создавать пользовательские интерфейсы на основе ваших DTO, если вы случайно их используете.

0 голосов
/ 14 января 2009

Мы используем отражение, чтобы иметь возможность отобразить элементы управления из уровня пользовательского интерфейса непосредственно в свойства бизнес-объекта в слое данных. Это позволяет вам иметь «универсальную» функцию в baseForm, которая «автоматически заполняет» BO данными UI и наоборот, без необходимости писать код для каждого элемента управления и свойства формы и объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...