Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Atributo Subtotal do Model ItemPedido

Boa noite pessoal, Finalizei a tarefa 06 - Atualizando o Item na View com JavaScript, da aula 03, do curso Asp.net Core 2.0 parte 2, e notei que no meu código não havia o atributo subtotal do itemPedido. Fui investigar onde "comi bola" e percebi (fazendo o download do código fonte) que esse item foi adicionado na Aula 1 (no código do antes e depois foi onde ele apareceu). Só que no ultimo video da aula 1 onde são adicionados as anotações [DataMember] nas variáveis da classe ItemPedido esse atributo (public decimal Subtotal => Quantidade * PrecoUnitario;) não existia.

[DataContract]
    public class ItemPedido : BaseModel
    {   
        [Required]
        [DataMember]
        public Pedido Pedido { get; private set; }
        [Required]
        [DataMember]
        public Produto Produto { get; private set; }
        [Required]
        [DataMember]
        public int Quantidade { get; private set; }
        [Required]
        [DataMember]
        public decimal PrecoUnitario { get; private set; }
        [DataMember]
        public decimal Subtotal => Quantidade * PrecoUnitario;

        public ItemPedido()
        {

        }

        public ItemPedido(Pedido pedido, Produto produto, int quantidade, decimal precoUnitario)
        {
            Pedido = pedido;
            Produto = produto;
            Quantidade = quantidade;
            PrecoUnitario = precoUnitario;
        }
    }

Poderiam me ajudar e informar qual video esse item foi tratado para que eu possa recapitular a explicação da confecção desse atributo?

Muito obrigado.

2 respostas
solução!

Olá, lwsantos

Peço desculpas, porque quem comeu bola fui eu.

Fui dar uma olhada no código das aulas e percebi que adicionei essa propriedade Subtotal entre os cursos Asp.NET Core 2.0 parte 2 e Asp.NET Core 2.0 parte 2, por isso essa explicação não aparece em nenhum vídeo.

Agora, a explicação. Essa propriedade:

[DataMember]
        public decimal Subtotal => Quantidade * PrecoUnitario;

... nada mais é o do que uma propriedade "read only", isto é, propriedade com get mas sem set, que poderia ser escrita de outra forma:

[DataMember]
        public decimal Subtotal
        {
        get 
        {
            return Quantidade * PrecoUnitario;
        }
        }

Com a propriedade Subtotal, a entidade ItemPedido tem pode fazer ela mesma o cálculo do subtotal, e assim evitamos passar essa responsabilidade de regra de negócio para outros trechos de código da aplicação, como é o caso do código JavaScript que você está estudando agora.

Agradeço por nos avisar, pois assim posso adicionar uma instrução no curso para que os alunos adicionem essa propriedade se ela não existir no projeto, evitando os problemas que você encontrou.

Muito obrigado e bons estudos!

Muito obrigado pela resposta Marcelo.

Entendi perfeitamente a funcionalidade da propriedade que calcula e assim transferimos a responsabilidade para a Model em vez da View.

Legal o exemplo de como ficaria se implementasse do modo mais "tradicional". Da pra fazer um de->para dos novos padrões vs padrões mais antigos para os dinossauros que nem eu ... rsrs

Valeu.