DDD パターンを使用してアプリを開発しています。
Invoice
ドメイン層にクラスがあります。
public class Invoice
{
List<InvoiceLine> list = new List<InvoiceLine>();
public DateTime Date { get; set; }
public Customer Customer { get; set; }
public decimal GrandTotal
{
get
{
// Simplified grand total.
// It's actually include tax and discount to calculate.
decimal total = 0m;
foreach(InvoiceLine line in Lines)
total += line.LineTotal;
return total;
}
}
public IEnumerable<InvoiceLine> Lines
{
get { return list; }
}
public void AddLine(InvoiceLine line)
{
lines.Add(line);
}
}
私は mvvm パターンを使用しているので、請求書を編集するためのビューモデルもあります。私の質問は、ドメインとプレゼンテーションのビジネス ロジックが同じになるように、GrandTotal を計算するビジネス ロジックをどこに置くべきですか?
ドメインからプレゼンテーション (Invoice
へInvoiceViewModel
) にコードを複製する必要がありますか? または、ドメインとプレゼンテーションの両方が使用できるサービスを作成しますか?