Что такое Caliburn Validation abstraction
Недавно я увидел этот документ, в котором указано, насколько хорош Caliburn (на самом деле он не сравнивает его с микро-фреймворком, и этого достаточно). Я работаю с Caliburn больше года и мало что знаю об этом.
Поэтому, возможно, кто-то может объяснить следующее (кое-что из того, что я могу понять, но не имею никакого отношения к калибровке):
- Валидационная абстракция
- каркас модуля
- ExpressionTree-основанная генерация делегата времени выполнения
- ViewModelFactory
- ShellFramework
Я работаю с V1.1, так что если что-то новое в 2.0, просто скажите, что оно принадлежит новой версии, я узнаю об этом, вероятно, в будущем.
1 ответ
Абстракция проверки направлена на подключение инфраструктуры проверки в ViewModels.
Caliburn-хDefaultValidator
использует System.ComponentModel.DataAnnotations, но также доступен адаптер для Fluent Validation.
Хотя валидация может использоваться непосредственно из кода приложения, она используется платформой в основном в поведении валидации AOP, которое обеспечивает автоматическийIDataErrorInfo
реализация для моделей.Если ваши модели уже реализованы
IDataErrorInfo
Caliburn может использовать проверку (как часть обычного процесса привязки), используя простую привязку WPF.
Тем не менее, реализацияIDataErrorInfo
вручную скучно и может привести к трудоемкому коду, поэтому АОП[ValidateAttribute]
был представлен. Чтобы включить его, вы должны настроить свой контейнер на использование доступной фабрики прокси (которая основана на Castle.DynamicProxy):myContainerAdapter .WithProxyFactory<Caliburn.DynamicProxy.DynamicProxyFactory>()
Это указывает адаптеру контейнера проверять атрибут поведения, примененный к ViewModels (и другим компонентам), извлеченным из контейнера, и создавать их подкласс, реализующий указанное поведение.
[Validate]
реализация поведения просто делегирует вызовы IDataErrorInfo фактическимIValidator
оказание услуг.Каркас модуля используется самой Caliburn для управления настройкой и инициализацией своих собственных модулей. Его также можно использовать для создания независимых прикладных модулей: Caliburn позаботится об их обнаружении (если их сборки зарегистрированы в IAssemblySource), а также об их инициализации;
- Caliburn не использует рефлексию для вызова действия, но строит делегатов на лету, используя деревья выражений для создания скомпилированной лямбды;
- Служба ViewModelFactory используется Caliburn для абстрагирования создания виртуальной машины либо по типу, либо по обрабатываемой теме;
- ShellFramework содержит набор средств, полезных для создания большинства приложений; это включает в себя некоторые обычай
IResult
(вместе со статическими методами в свободном стиле для их создания) и некоторые предварительно созданные ViewModels (меню и диалог вопросов / сообщений) для выполнения типичных задач приложения.