Практическое использование для новых RTTI Delphi - Атрибуты, Значения - PullRequest
19 голосов
/ 17 апреля 2010

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

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

Ответы [ 2 ]

20 голосов
/ 17 апреля 2010

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

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

  1. Сериализация / десериализация классов в XML или другие носители
  2. Отображение объектов в базах данных. ОРМ.
  3. Клонирование объектов
  4. Динамический вызов методов
  5. «Сканирование» объекта во время выполнения и действовать в соответствии с этим.
  6. Упрощенная разработка систем типа "плагин"

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

5 голосов
/ 17 апреля 2010

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

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

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


Другим типичным вариантом использования расширенных RTTI являются Инверсия управления и Внедрение зависимостей каркасы.

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

...