次のドメイン エンティティがあります。
public class CartItem
{
public virtual Guid Id { get; set; }
public virtual Guid SessionId { get; set; }
public virtual int Quantity { get; set; }
public virtual Product Product { get; set; }
}
私は次のDTOを持っています:
public class CartItemDTO
{
public CartItemDTO(CartItem cartItem)
{
Id = cartItem.Id;
Quantity = cartItem.Quantity;
Name = cartItem.Product.Name;
Price = cartItem.Product.Price;
}
public Guid Id { get; private set; }
public int Quantity { get; private set; }
public string Name { get; private set; }
public decimal Price { get; private set; }
}
現在のワークフローは非常に単純です。私のリポジトリは CartItem 型の IEnumerable を返します。私のサービスはそれを dto (CartItemDTO) に変換します。私のコントローラーはそれをビューに渡します。ここまでは順調ですね。
ここで、各項目の合計を実装したいと考えています。次のプロパティを CartItemDTO に追加しました。
public decimal Total { get; private set; }
次に、次のコードを CartItemDTO コンストラクターに追加しました。
Total = cartItem.Quantity * cartItem.Product.Price;
私の最初の質問は、これがベスト プラクティスのアプローチであるかどうかです。そうでない場合、なぜですか?Total プロパティを別の場所に追加する必要がありましたか? もしそうなら、なぜですか?
また、カート全体の合計を実装したかったので、新しいクラス (以下) を作成し、それを返すようにサービスを変更しました。
public class CartItemResult
{
public CartItemResult(IEnumerable<CartItemDTO> result)
{
CartItems = new List<CartItemDTO>(result);
Total = result.Sum(total => total.Total);
}
public IList<CartItemDTO> CartItems { get; private set; }
public decimal Total { get; private set; }
}
これで、新しいクラスをビューに渡すか、別の ViewModel を作成して新しいクラスのコンテンツを ViewModel に渡し、それをビューに渡すことができます。
2 番目の質問は、このアプローチがベスト プラクティスのアプローチであるかどうかです。そうでない場合、なぜ、何を別の方法で行う必要があったのでしょうか?