2018년 4월 16일 월요일

MVVM Light Toolkit

MVVM Light Toolkit은 GalaSoft라는 곳(?)에서 만든 MVVM 아키텍쳐의 구현체다. Laurent Bugnion이라는 스위스 취리히에 사는 개발자가 만들었는데 현재는 Microsoft Azure 팀에서 근무중인듯 하다. MVVM은 Model-View-ViewModel의 View와 Model을 분리하기 위한 아키텍쳐 스타일로, Prism과 함께 WPF에서 가장 많이 쓰이는 패턴 중 하나다. WPF가 더이상 잘 쓰이진 않지만 ㅠㅠ. View와 Model이 분리된 구조로 개발을 진행하면 Model에 대한 테스트 그리고 디자이너간 협업 측면에서 여러 이점이 있다.

MVVM Light Toolkit을 이용하면 당연히 WPF 기반의 MVVM 애플리케이션을 빠르게 개발할 수 있다. 주요 클래스 개수도 많지 않기 때문에 어렵지 않게 적응이 가능하다. 설치는 Nuget Package Manager를 이용하는게 가장 간편한 방법이다.

MVVM Light Toolkit은 2개의 main DLL로 유지된다.
GalaSoft.MvvmLight.dll
GalaSoft.MvvmLight.Extras.dll

GalaSoft.MvvmLight.dll의 주요 클래스 목록이다.
ObservableObject - Base class for Model classes. It creates Model properties as observable.
ViewModelBase - Base class for ViewModel classes.
RelayCommand - A command. More about commands here.
WeakAction - Stores an System.Action without causing a hard reference to be created to the Action's owner. The owner can be garbage collected at any time.
WeakFunc - Stores an Func without causing a hard reference to be created to the Func's owner. The owner can be garbage collected at any time.
Messenger - Class for allowing objects to exchange messages.
MessageBase - Base class for all messages broadcasted by the Messenger.
DispatcherHelper - Helper class for dispatcher operations on the UI thread.

다음은 Galasoft.MvvmLight.Extras.dll의 주요 클래스 목록이다. 
EventToCommand - Used for bind any event of FrameworkElement to ICommand.
SimpleIOC - An IOC container for register and resolve instances.

ObservableObject을 상속받아 모델을 구현하면 변경점이 바로 View에 반영되는데 필요한 기반 기능을 얻을 수 있다.
ViewModelBase를 상속받아 뷰-모델을 구현하면 View 도는 다른 ViewModel과 상호작용하는데 필요한 기반 기능을 얻을 수 있다.
Messenger는 의존 관계를 두지 않고 ViewModel과 ViewModel 간 상호작용할 수 있는 방법을 제공하며,

SimpleIOC라는 IOC 컨테이너를 통해 Service Locator 패턴을 쉽게 구현할 수 있는 방법을 제공한다.
void Register<TMessage>(object recipient, object token, bool receiveDerivedMessagesToo, Action<TMessage> action);
void Send<TMessage>(TMessage message, object token);

Messenger와 SimpleIOC는 모두 클래스 간 의존성을 줄여주기 위한 장치다.
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
ServiceLocator.Current.GetInstance<MainViewModel>();

공식 사이트와 깃허브 주소는 아래와 같다.

댓글 없음:

댓글 쓰기