![pexelshiteshchoudhary879109 | Embarcadero RAD Studio Delphi C++Builder Blogs pexels hitesh choudhary 879109](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/05/pexels-hitesh-choudhary-879109-1960390-scaled.jpg?resize=1140%2C694&ssl=1)
В недавнем эпизоде TCoffeeAndCode, посвященном Data ETL, было отличное обсуждение использования FireDAC для извлечения данных и управления ими различными способами.
Повтор, если вы его пропустили, ссылка на видео воспроизведения приведена ниже.
Table of Contents
Data ETL стал простым способом — благодаря твиту!
Мы также — среди прочего — говорили о преимуществах LiveBindings. Буквально за десять минут до того, как мы должны были начать вебинар, я наткнулся на твит от новоиспеченного MVP Embarcadero Дэвида Корнелиуса, в котором он упомянул, что экспериментировал с LiveBindings RAD Studio.
Что ж, это было как раз вовремя! Дэвид продолжает в своем сообщении в блоге немного описать LiveBindings и свой личный путь, в котором он прошел, как и я, от чувства теплого самодовольства по отношению к ним до признания тонкостей их использования.
LiveBindings мощнее, чем кажется
Когда я впервые услышал о LiveBindings, мне показалось, что они представляют собой своего рода вариацию старых datasource
/ datafield
вид отношений, обнаруженных в старых версиях Delphi и почтенном Visual Basic. Они выглядели так, как будто мы должны связать элементы управления на экране с полем (или полями) таблицы базы данных, хотя и с более красивым графическим редактором отношений.
![LiveBinding | Embarcadero RAD Studio Delphi C++Builder Blogs livebinding](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/04/LiveBinding-5234473.png?resize=434%2C671&ssl=1)
Как только вы начнете царапать поверхность LiveBindings, если вы хоть немного похожи на меня, LiveBindings начнут постепенно раскрывать себя, и вы обнаружите, что существует НАМНОГО больше возможностей, чем простое указание поля для этого типа управления. отношений. Связывание элементов управления с классами и внутренними структурами данных кода — одна из тех функций Programmer Super Power RAD Studio, которые, как я постоянно говорю, являются причиной того, почему такой ленивый программист, как я, на самом деле может быть пугающе продуктивным. Это не я, это RAD Studio и, по крайней мере, в моем случае Delphi.
ETL данных с выражениями LiveBinding
Есть еще несколько замечательных статей, в которых описываются LiveBindings от начального этапа до более сложных тем:
- Быстро узнайте, как легко привязать наборы данных к визуальным элементам управления в Delphi с помощью LiveBindings (embarcadero.com)
- Результаты поиска по запросу «livebindings» — документация по API RAD Studio (embarcadero.com)
- Выражения, свойства и компоненты привязки Delphi (marcocantu.com)
Но Дэвид Корнелиус принял идею LiveBindings и пошел немного дальше!
Как расширить LiveBindings с помощью пользовательских выражений привязки
Дэвид создал набор кода, доступного на GitHub, который добавляет некоторые пользовательские выражения в редактор LiveBindings.
![Screenshot 20210530 154502 | Embarcadero RAD Studio Delphi C++Builder Blogs screenshot 2021 05 30 154502](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/05/Screenshot-2021-05-30-154502-4601883.png?resize=750%2C661&ssl=1)
Репозиторий содержит набор единиц, которые могут быть включены в ваши приложения, которые затем расширяют доступные пользовательские выражения LiveBinding, включая такие вещи, как автоматическое вычисление лет с даты, содержащейся в поле базы данных (или записи или классе — это LiveBinding, не надо) забываю).
Пользовательское выражение LiveBindings
Вот несколько строк кода из репозитория Дэвида:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function MakeMinutesSinceMethod: IInvokable; begin Result := MakeInvokable(function(Args: TArray<IValue>): IValue var InputDate: TDateTime; RoundDigits: Integer; MinutesSince: Double; begin CheckArgs(Args, InputDate, RoundDigits); MinutesSince := RoundTo(TTimeSpan.Subtract(Now, InputDate).TotalMinutes, RoundDigits); Result := TValueWrapper.Create(MinutesSince); end); end; |
Этот код означает, что вы можете добавить настраиваемое выражение LiveBinding MinutesSince(MyDateTimeDBField, 2)
для вывода значения MyDateTimeDBField в виде количества минут с даты и времени, содержащихся в этом поле. Очень хорошо.
Альтернативные способы расчета даты и времени в LiveBindings
Дэвид использует довольно эффективный код в своих методах пользовательских выражений. Если мы включим System.DateUtils
модуль в наш собственный код, мы сможем изменить и / или расширить функции Дэвида, включив почти любые вычисления даты / времени, содержащиеся в этом модуле, где это необходимо. Например, мы могли бы создать функцию под названием «IsAM» и связать ее с IsAM
функцией в модуле DateUtils и заставить ее отображать некоторый специальный текст, если связанное поле datetime было или не было утром или днем.
Эффективны ли привязки RAD Studio LiveBindings?
Конечно, чем больше функций вы добавляете и чем больше модулей вы включаете, тем больше раздувается ваш код, поэтому используйте их экономно. Вам также необходимо убедиться, что ваши пользовательские выражения являются максимально точными и быстрыми, поскольку они связываются и работают с полями или структурами базы данных, и вы, конечно, можете ожидать, что медленная пользовательская привязка LiveBinding повлияет на общую неэффективность, если вы имея дело с тысячами, а может, и с десятками тысяч записей.
Где узнать больше о пользовательских привязках LiveBindings
Вам обязательно нужно прочитать отличную статью в блоге Дэвида Корнелиуса о пользовательских привязках в реальном времени: https://corneliusconcepts.tech/beyond-standard-livebindings
Вы также можете перейти на его страницу GitHub и клонировать репо прямо оттуда: https://github.com/corneliusdavid/LiveBindingsBeyond
На момент написания статьи Дэвид еще не появился в каталоге Embarcadero MVP, но скоро появится. Не могу дождаться, чтобы увидеть больше того, что он придумывает!
RAD Studio Delphi делает извлечение, преобразование и загрузку данных — Data ETL — быстрым, эффективным и простым. Почему бы не скачать пробную копию сегодня?
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition