새로운 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개의 좋아요