Что такое абстракция Caliburn Validation - PullRequest
3 голосов
/ 31 декабря 2010

Недавно я увидел этот документ, в котором указано, насколько велик Caliburn (на самом деле он не сравнивает его с микро-фреймворком, и этого достаточно). Я работаю с Caliburn больше года и мало что знаю об этом.

Так что, может быть, кто-то может объяснить следующее (кое-что из того, что я могу понять, но не имею никакого отношения к калибру):

  1. Валидационная абстракция
  2. Каркас модуля
  3. Генерация делегатов на основе ExpressionTree
  4. ViewModelFactory
  5. ShellFramework

Я работаю с V1.1, так что если что-то новое в 2.0, просто скажите, что оно принадлежит новой версии, я узнаю это, вероятно, в будущем.

1 Ответ

7 голосов
/ 03 января 2011
  1. Абстракция проверки предназначена для подключения инфраструктуры проверки в ViewModels.
    Caliburn's DefaultValidator использует System.ComponentModel.DataAnnotations, но также имеется адаптер для Свободная проверка доступно.
    Хотя проверку можно использовать непосредственно из кода приложения, она используется платформой в основном в поведении проверки AOP, которое обеспечивает автоматическую реализацию IDataErrorInfo для моделей.

    Если ваши модели уже естьВнедрив IDataErrorInfo, Caliburn может подключить валидацию (как часть обычного процесса связывания), используя простую привязку WPF.
    Тем не менее, реализация IDataErrorInfo вручную скучна и может привести к трудно поддерживаемому коду, поэтому AOP[ValidateAttribute] было введено.Чтобы включить его, вы должны сконфигурировать свой контейнер для использования доступной фабрики прокси (которая основана на Castle.DynamicProxy):

    myContainerAdapter .WithProxyFactory<Caliburn.DynamicProxy.DynamicProxyFactory>()

    Это указывает адаптеру контейнера проверять атрибут поведенияприменяется к ViewModels (и другим компонентам), извлеченным из контейнера, и для создания их подкласса, реализующего указанное поведение.

    Реализация поведения [Validate] просто делегирует вызовы IDataErrorInfo действительной службе IValidator.

  2. Каркас модуля используется самой Caliburn для управления настройкой и инициализацией своих собственных модулей.Его также можно использовать для создания независимых прикладных модулей: Caliburn позаботится об их обнаружении (если их сборки зарегистрированы в IAssemblySource) и об инициализации диска;

  3. Caliburn не использует отражение для вызова действия, но создает делегаты на лету, используя деревья выражений для создания скомпилированной лямбды;
  4. Служба ViewModelFactory используется Caliburn для абстрагирования создания виртуальной машины либо по типу, либо по обрабатываемой теме;
  5. ShellFramework содержит набор средств, полезных для создания большинства приложений;он включает в себя некоторые пользовательские IResult (наряду со статическими методами в свободном стиле для их создания) и некоторые предварительно созданные ViewModels (меню и диалог вопросов / сообщений) для выполнения типовых задач приложения.
...