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

Практическое использование для Delphi нового RTTI - Атрибуты, значения

Я нашел отличное объяснение нового RTTI в Delphi, но я не понимаю одну важную вещь обо всем, что я прочитал - Where я могу использовать это?

Что он должен заменить?

4b9b3361

Ответ 1

Расширенный RTTI работает как Reflection в .NET. Это дает вам доступ к вашей внутренней структуре структуры приложения. Вы можете получить доступ к свойствам класса, методам и т.д. Во время выполнения, в той степени, в какой вы не могли этого сделать раньше.

Некоторые способы использования:

  • Сериализация/десериализация классов для XML или других носителей.
  • Сопоставление объектов с базами данных. ОРМ.
  • Клонирование объектов
  • Динамический вызов методов
  • "Сканирование" объекта во время выполнения и действия в соответствии с этим.
  • Более легкое развитие систем типа "плагин"

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

Ответ 2

Один пример, где может быть полезен расширенный RTTI:

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

С расширенным RTTI Delphi может использовать новый потоковый уровень, который не требует такого высокого уровня видимости. Конечно, это только идея, но на практике имеет то преимущество, что все компоненты в форме могут быть private или защищены. Это будет больше ООП (инкапсуляция) и исключить "шум", вызванный множеством нерелевантных записей в списке полей/свойств формы, видимых снаружи.


Другим типичным вариантом использования расширенного RTTI является Inversion of control и Инъекции зависимостей.

Например, Delphi Spring Framework Delphi требует Delphi 2010 (или выше) из-за его тяжелой использование RTTI, которое можно использовать для впрыска конструктора.