Практическое использование для новых RTTI Delphi - Атрибуты, Значения
Я нашел отличное объяснение о новом RTTI в Delphi, но я не понимаю одну важную вещь из всего, что я прочитал - Где я могу это использовать?
Что он должен заменить?
2 ответа
Расширенный RTTI работает как Reflection в.NET. Это дает вам доступ к вашей внутренней информации о структуре приложения. Вы можете получить доступ к свойствам класса, методам и т. Д. Во время выполнения, если вы не могли этого сделать раньше.
Некоторые способы его использования:
- Сериализация / десериализация классов в XML или другие носители
- Отображение объектов в базы данных. ОРМ.
- Клонирование объектов
- Динамический вызов методов
- "Сканирование" объекта во время выполнения и действовать в соответствии с этим.
- Более простая разработка систем типа "плагин"
Вероятно, существует множество сценариев, в которых было бы полезно его использовать. Вкратце, это добавляет динамический аспект вашему приложению. Ваш продукт способен делать некоторые вещи во время выполнения и более эффективно, чем проектировать все во время разработки. Это не серебряная пуля, и многие люди никогда не смогут ее использовать. Но некоторые шаблоны проектирования или некоторые проблемы просто не могут быть решены (по крайней мере, неэффективно) без использования нового RTTI
Один пример, где расширенный RTTI может быть полезен:
До сегодняшнего дня свойства формы должны были публиковаться, потому что эта видимость была необходима для сериализации / десериализации файлов форм Delphi (dfm).
С расширенным RTTI Delphi может использовать новый потоковый уровень, который не требует такого высокого уровня видимости. Конечно, это только идея, но на практике есть преимущество в том, что все компоненты в форме могут быть частными или защищенными. Это будет больше ООП (инкапсуляция) и устранит "шум", вызванный десятками нерелевантных записей в списке полей / свойств формы, видимых извне.
Другим типичным вариантом использования расширенных RTTI являются Inversion of Control и Dependency Injection.
Например, Delphi Spring Framework Delphi требует Delphi 2010 (или выше) из-за интенсивного использования RTTI, который можно использовать для внедрения в конструктор.