inotifyPropertyChanged Boilerplateを取り除く方法


.NET ユーザーインターフェイスを書く素晴らしいプラットフォームです.からWindows Forms to WPF to Xamarin , WinUI or Blazor , あなたは、デバイスの広い範囲で同じプラットフォームと言語に依存することができます.
強い.NETはUIプラットフォームとして、サードパーティの機能を利用するのにとても便利ですSyncfusion . SyncFusionの使命は、エンタープライズアプリケーションで使用する準備が整いました美しく、よく設計されたUIコントロールを構築することです.1ダース以上のプラットフォームをターゲットにして1600以上のコンポーネントを使用すると、このタスクでsyncfusion優れている疑いがない.
PostSharpのツールは、ビジネスオブジェクトが変更されるときにプロジェクトのUIのリフレッシュを自動化し、大幅に削減するために必要なボイラー板のコードです.一緒に、これらのツールは開発者の時間と頭痛を開発することができます.ネット
このブログではPostSharp の機能を向上させるINotifyPropertyChanged インターフェイスとSyncFusionの互換性のあるコントロールのいくつかで作成されたUIを使用して例を示します.

による問題
残念ながら、ビジネスコードとUIを統合する.ネットは簡単な仕事ではない.最も困難な点は、ビジネスオブジェクトが変更されるとき、UIが自動的にそれ自体をリフレッシュさせることです.この作業を行うには、モデルとビューモデル層のすべてのクラスで悪名高いinotifyPropertyChangedを実装する必要があります.典型的には、それぞれのプロパティを1行にする代わりに、次の例のように6を取ることを意味します.
private string name;

public string Name
{
    get => name;
    set
    {
       name = value;
       RaisePropertyChanged("Name");
    }
}
あたかも1行ではなく、6行のコードを書くことができないかのように、inotifyPropertyChangedの実装も頻繁にバグの原因となります.それは非常にフィールドを変更するときにプロパティの変更を高めることを忘れて簡単です!

エンターポストシャープ
幸いにも、任意のボイラープレートコードなしで自動的にinotifyPropertyChangedインターフェイスを実装できるツールがあります.これらのツールの一つはPostSharpです.
すべてのプロパティで機能を実装する代わりに、[ NotifyPropertyChanged ]カスタム属性を基本クラスに追加し、完了します.
[NotifyPropertyChanged]
public class CustomerModel 
{
    public string Name { get; set; }
}
前の例はポストシャープコミュニティ、ポストシャープの無料版で完全に覆われています.それはあなたが望む場合は、あなたのボイラー板のほとんどを取り除くことができることを意味し、無料です.新しいsource generators of C# 9.0 また、そのボイラー板を減らすのを助けるかもしれません.
しかし、このケース以上です.
競合するツールとは異なり、PostSharpはFullNameのような複合プロパティもサポートしています.firstNameまたはLastNameを変更すると、PostSharpはfullnameが変更されたとも言います.
[NotifyPropertyChanged]
public class CustomerModel 
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName => FirstName + " " + LastName;
}
PostSharpは、子オブジェクトのプロパティに依存するプロパティもサポートします.これはView Model Layerで非常に役に立ちます.そして、それは典型的にモデル層を公開します.たとえば、顧客が長い名前を持つときにフォントサイズを小さくしたい場合を想定してください.これは特に、子オブジェクトの変更に反応する必要があるので、プレーンCでは実装できません.しかし、ポストシャープでは、これは1つのライナーです.
[NotifyPropertyChanged]
public class CustomerViewModel
{
    public double BaseFontSize { get; set; } = 12;

    public CustomerModel Customer { get; set; }

    public double FullNameFontSize
        => Customer.FullName.Length > 20 ? 
         this.BaseFontSize : 
         this.BaseFontSize * 1.2;
}

どうやって動くの?
アーサーC .クラーク(「2001年の共同のOdyssey」)は、有名に言いましただから、ポストシャープの背後にある魔法は何ですか?
ソースPostSharp
PostSharpはポストコンパイラです.プロジェクトにNugetパッケージを追加すると、C Cacheコンパイラの直後にビルドプロセスに挿入され、コンパイラの出力を読み込み、解析し、要求された動作を追加して、それを書き込みます.PostSharpは、自動的にあなたの最も退屈で反復的なタスクを実装する方法をコンパイラを教えるために、開発者を可能にするアスペクト指向プログラミングという名前の技術を実装しています.
ちょっと考えてください.あなたは、inotifyPropertyChangedを実装する誰かを教えることができますか?もちろん!どのように多くの発明力は、このタスクに必要ですか?ほとんどの場合、None!何かが退屈で反復的であるならば、アルゴリズムが人間よりそれをすることができる可能性があります.それは正確にPostSharpが作成された理由です.
PostSharpがあなたのクラスの上部にある[ NotifyPropertyChanged ]属性を見ると、最初にすべてのプロパティゲッターのコードを分析し、どのフィールドやプロパティやプロパティが依存しているかを調べます.例えば、このアルゴリズムはfullnameがfirstNameとLastNameの両方に依存し、fullNameFontSizeがfullname、Customer、およびbasefontSizeに依存していることを確認します.
その後、PostSharpは、フィールドを変更するすべてのメソッド(典型的にはプロパティセッター)を変更し、現在のスレッドのプロパティ変更通知をバッファリングします.
最後に、PostSharpは、それが通知を上げる良い時間であるときに検出するパブリックメソッドを変更します.フィールドが変更された直後に通知を上げるのは良い考えではありません.そこで、トップのパブリックメソッドの実行終了まで待機します.それは最初の視力で毛を分割するように見えるかもしれない少し詳細ですが、それはあなたの頭痛の多くを保存します.

互換性syncfusion製品スイート
すべてのよく設計された制御スイートと同様に、SyncFusion製品は、InittifyPropertyChangedインターフェイスを介してデータバインディングをサポートします.PostSharpは、任意のプロジェクトのターゲットを強化することができます.NET Framework .NETコア.NET 5、または.NET標準.したがって、ビューモデルとモデルプロジェクトが対象とする限り、PostSharp WindowsフォームとWPFだけでなく、XamarinとBlafforを使用できます.NET標準.以下はSyncFusionコントロールとPostSharpで作成されたプロジェクトです.
  • Syncfusion WPF application using PostSharp
  • Syncfusion Blazor application using PostSharp

  • 概要
    今日のユーザーは、ユーザーインターフェイスは、通常のinotifyPropertyChangedのおかげで実装をF 5 - A機能を押すことなく、データの現在の状態を反映することを期待します.手動でこのコードを書くのではなく、時間がかかるだけでなく、エラーが発生しやすい場合は、PostSharpのようなツールを使用することができます.あなたは、inotifyPropertyChanged Boilerplateのおよそ80 %を減らして、微妙なバグを避けます.
    PostSharpはまた、WPFの依存性のプロパティ、コマンド、ログ、キャッシング、マルチスレッド、トランザクション処理、および大いに多くから生じるボイラ板を減らすことができます.市販の企業でも利用できる無料のPostSharpコミュニティバージョンがあります.始めるにはPostSharp MVVM introduction video , ダウンロードdemo source code githubから、ハッキングを開始します.

    関連ブログ