ドメイン モデルには不変の値オブジェクトがたくさんあります。その一例が、緯度、経度、高さによって定義される位置です。
/// <remarks>When I grow up I want to be an F# record.</remarks>
public class Position
{
public double Latitude
{
get;
private set;
}
// snip
public Position(double latitude, double longitude, double height)
{
Latitude = latitude;
// snip
}
}
位置の編集を許可する明白な方法は、getterとsetterを持つ ViewModel と、検証済みの不変の位置インスタンスを抽出する ToPosition() メソッドを構築することです。この解決策は問題ありませんが、多くの重複コード、特に XAML が発生します。
問題の値オブジェクトは、通常、X、Y、Z およびいくつかの補助要素のバリアントである 3 ~ 5 つのプロパティで構成されます。これを考慮して、さまざまな可能性を処理するために 3 つの ViewModel を作成することを検討しました。各 ViewModel は、各プロパティの値のプロパティと、各ラベル (「Latitude」など) に表示する説明を公開する必要があります。
さらに進むと、N 個のプロパティを処理し、リフレクションを使用してすべてを接続できる 1 つの一般的な ViewModel に単純化できるようです。プロパティ グリッドのようなものですが、不変オブジェクト用です。プロパティ グリッドの 1 つの問題は、次のようなラベルとテキスト ボックスを使用できるように、外観を変更できるようにすることです。
Latitude: [ 32 ] <- TextBox
Longitude: [ 115 ]
Height: [ 12 ]
または、次のような DataGrid に配置します。
Latitude | Longitude | Height
32 115 12
だから私の質問は:
この問題を解決するエレガントな方法を思いつきますか? これを行うライブラリや、同様の記事はありますか?
私は主に探しています:
- コードの重複を最小限に抑える
- 新しい値のオブジェクト タイプを簡単に追加できます
- ある種の検証で拡張可能