Извините за отсутствие примера кода. Как уже отмечалось, это скорее идея (в широком смысле для этого Exchange), но это способ высокого уровня, который я делал раньше. В те времена, когда «рефлексия» вызывала неодобрение, мы называли ее «метаданными», но по существу использовали рефлексию - и по этой причине сегодня она известна как метапрограммирование.
Ваша проблема, прекрасный пример использования метапрограммирования . Отражение раньше было очень медленным в 80-х годах только из-за нехватки памяти и ограниченной загрузки процессора.
- Сериализации, такие как JSON, используют отражение или позорно медленный XML (но не больше)
- Внедрение зависимостей - мать метапрограммирования
- Такие помощники, как auto mapper, тоже в основном рефлексия.
Сегодня он был высоко оптимизирован и отлично работает благодаря превосходной вычислительной мощности. Пока вы не пишете хакерский код или не пытаетесь его оптимизировать, все будет в порядке. Для этого вам следует довериться фреймворку и компиляторам.
Вы можете делать некоторые причудливые вещи, такие как перехват изменений, но это может быть довольно сложным. Чтобы сделать его немного проще, все, что вам нужно сделать, это следовать немного DDD
Ваши классы должны позволять изменения только через те свойства, которые вы выставляете. Каждому набору или операции, изменяющим состояние, можно затем отправить свой прекрасный код отслеживания состояния.
в NET 4.5 действительно быстрое отражение, и метапрограммирование уже используется в Dependency Injection на протяжении всего шоу.
Чтобы запомнить изменения, используйте оптимизированную коллекцию, например, Словарь или HashSet. Зависит от ваших потребностей. Используя GetType
, сохраните его в качестве ключа, и значением может быть новое значение или класс, содержащий метаданные. Старое значение, Новое значение, Версия (для отката) и т. Д. И т. Д.
Как только вы начнете это делать в своем классе, вы затем переместите всю логику в синглтон и определите некоторые общие методы, которые вы будете повторно использовать на всех ваших "сущностях"