新しいViewModel()で提供されるCreate.cshtmlをレンダリングしています。フォームを送信する前に、Ajaxを使用して価格を計算したいと考えています。私のビューモデルは計算方法や機能を複製したいのか分からない。この動作は、カプセル化の根拠となるドメインモデルにあります。ドメインモデルとビューモデル間でロジックを共有する正しい方法
Ajaxを使用して、ドメインモデルが作成される前に、フォーム自体を完成する前に、ユーザーに合計価格を指定する「Calculate」アクションメソッドを呼び出したいと思います。
どのようにカプセル化を破ることなくこの機能を達成できますか?
注:処理の後半で、バスケット/支払い/処理の前にDomainModelが計算に使用されます。
public class DomainModel
{
public int Id { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }
public decimal Calculate()
{
return Quantity*Price;
}
}
public class ViewModel
{
[Required]
public int Id { get; set; }
[Required]
public int Quantity { get; set; }
public decimal Price { get; set;
}
私はクラスをパラメータと、基底クラスに計算()を配置することなく使用について同僚と議論しました自身の特性。基底クラスは、DomainモデルとViewモデルの両方に継承できますが、これは間違っているだけです。 – ManxJason
これらの計算を行う責任を別のクラス(TotalCalculator)に委譲し、そのクラスのインスタンスをDomainModelおよびViewModel内で使用して計算を行うことができます。継承の代わりにコンポジションを使用します。 – AdaTheDev
@AdaTheDevあなたの方法と静的電卓との違いは何ですか?この場合、インスタンスを持つ利点は何ですか? – ManxJason