У меня есть следующая сущность домена:
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; }
}
Текущий рабочий процесс довольно прост: мой репозиторий возвращает IEnumerable типа CartItem,Мой сервис преобразует его в 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 и передайте его представлению.
Мой второй вопрос сноваесли этот подход является подходом передовой практики?Если нет, то почему и что я должен был сделать по-другому?