새로운 MvvmGen 라이브러리 소개 – XAML 응용 프로그램에 대한 ViewModel 작성이 그 어느 때보 다 생산적이고 쉬워졌습니다. | Thomas Claudius Huber

지난 몇 주 동안 저는 XAML 기반 .NET 응용 프로그램에서 사용할 수있는 새로운 MVVM 라이브러리를 구축했습니다. 라이브러리는 MvvmGen 이라고 합니다 . Roslyn 기반 C # 소스 생성기를 사용하여 모든 ViewModel 관련 상용구를 생성하며 .NET Standard 2.0으로 빌드되어 WPF, WinUI, Uno Platform, Xamarin.Forms 및 .NET에서 사용할 수 있습니다. MAUI 앱.

MvvmGen 은 C# 소스 생성기에 중점을두고 처음부터 구축 한 최신 차세대 MVVM 라이브러리입니다. ViewModel 클래스를 만들기 위해 일반적으로 작성하는 모든 반복 코드 ( 보일러 플레이트 라고도 함 )가 생성됩니다. 이제 새로운 라이브러리를 환영하고 살펴 보겠습니다.

좋아요 3

오…여기 글에는 일전에 언급하신 소스생성기에 대해 언급되어있군요

좋아요 2

넵. 그래서 다음의 소스코드로 소스 생성기의 특징도 알수 있습니다.

using MvvmGen;
using MvvmGen.Events;

namespace MyWinUiApp
{
  [Inject(typeof(IEventAggregator))]
  [ViewModel]
  public partial class EmployeeViewModel
  {
    [Property] private string _firstName;
    [Property] private string _lastName;

    [Command(CanExecuteMethod = nameof(CanSave))]
    private void Save()
    {
      EventAggregator.Publish(new EmployeeSavedEvent(FirstName, LastName));
    }

    [CommandInvalidate(nameof(FirstName))]
    private bool CanSave()
    {
      return !string.IsNullOrEmpty(FirstName);
    }
  }
}

여기서 Roslyn 소스 생성기의 특성 상 사용자 코드를 수정할 수가 없거든요. 그래서 위의 소스코드를 보시면 클래스의 기능을 확장할 때는 반드시 partial class 여야 한다는 특징이 있고, Property를 생성하는 것은 Property자체를 수정 할 수 없어서 필드에 Attribute를 부여해서 Property를 자동 생성하는, 아직은 좀 어색한(익숙해져야하는) 표현이 들어가야 만 합니다.

좋아요 2

그렇군요…저는 devexpress mvvm 만 사용해봤는데 여기서는 그냥 poco viewmodel 모드에서는 노티피케이션 프로퍼티에 대해 virtual로만 정의해주면 다 재정의해주던데 뭔가 비슷한가보군요.

좋아요 1

차이점은 아마 런타임에 자동으로 코드를 생성하느냐(emit 등) 컴파일 타임에 자동으로 코드를 생성하느냐의 차이일것 같아요.

좋아요 2

뭔가 막연하게 런타임일거라고만 생각은 했는데…ㅎㅎ 실제로 눈으로 확인한게 아니라서 궁금하긴합니다. 사실 깃헙에 소스 다 공개되어있는데 분석할 시간이 없어서 그냥 쓰고 있네요…ㅎㅎ

좋아요 1

우와. 무지막지 하게 멋지네요.
ㅎㅎㅎ 한번 구경해봐야할 것 같습니다.

좋아요 2