私たちのページの多くは、基本的に NHibernate マップされたエンティティのカットバック バージョンであるカスタム ビュー モデルを使用しています。
エンティティのグローバル セットがある場合、ロジックをエンティティに追加できるため、エンティティ中心のビジネス ロジックの小さな部分を再利用するのは簡単です。ただし、ビュー固有のビュー モデルがあると、これは難しくなります。
これは不自然な例です:
// Entity
public class Sale : Entity
{
public Guid Id { get; set; }
public decimal Tax { get; set; }
public decimal SalePrice { get; set; }
public int TotalPrice
{
get { return Tax + SalePrice; }
}
... more properties ...
}
// View model
public class SaleView
{
public Guid Id { get; set; }
public decimal Tax { get; set; }
public decimal SalePrice { get; set; }
}
public class Controller
{
public Action ViewSale(Guid id)
{
return Session.Query<Sale>()
.Where(x => x.Id == id)
.Select(x => new SaleView
{
Id = x.Id,
Tax = x.Tax,
SalePrice = x.SalePrice
});
}
}
この例では、エンティティで現在実行されている "TotalPrice" 計算を再利用するためにどのような戦略を使用しますか?
「TotalPrice」をどこかで静的メソッドにして、税と販売価格をパラメーターとして受け入れるようにすることもできますが、これは、特にプロパティの数とプロパティ間の関係が大きくなるにつれて、非常に醜く柔軟性のないコードになる可能性があります。別の「TotalPriceCalculator」クラスを作成することもできますが、ViewModel を処理するには、エンティティとビュー モデルの両方が実装するインターフェイスを受け入れる必要があります。これにより、各プロパティを 3 回書き出す必要があるため、重複したコードが急増する可能性があります。他に何ができますか?