-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Trabalhar com Value Objects Design Patterns #27
Comments
Alguns pontos sobre o exemplo em código:
Então teríamos um exemplo mais ou menos assim: public class Checkout
{
public Checkout(int id, int code, Guid token)
{
this.CheckoutId = id;
this.CheckoutCode = code;
this.Token= token;
}
public int CheckoutId { get; }
public int CheckoutCode { get; }
public Guid Token { get; }
}
public class MerchantCheckout
{
public MerchantCheckout(Checkout checkout, string cnpj)
{
this.Checkout= checkout;
this.Cnpj= cnpj;
}
public Checkout Checkout { get; }
public string Cnpj { get; }
} Uma outra coisa sobre Value Objects: Estes objetos seriam utilizados para transferir dados do domínio da aplicação para outros pontos da aplicação, ou seriam os objetos mapeados no banco de dados? Caso seja a segunda opção, temos as seguintes premissas:
A combinação destas premissas causam um problema: quando o ORM instanciar o objeto utilizando o construtor padrão, ele não conseguirá popular os dados do objeto, pois estes são readonly. |
@fernandoseguim, quando você fala de domínios distintos, estamos falando em aplicações distintas ou contextos distintos na mesma aplicação ? Esse padrão me parece exatamente o inverso de DTOs, ou estou enganado ? Na esteira dos comentários do @mathnogueira, minha dúvida na sua sugestão foi a mesma que surgiu do próprio Matheus, eu e outros colegas sobre a inclusão de um guideline de arquitetura neste repo: |
Sobre o ponto do @mathnogueira em relação a um ORM , eu vi num comentário deste artigo que o cara comenta que no entity framework vc pode utilizar um data annotation Complexytype que ele ja entende como passa os atributos por contrutor, mas não li nada a respeito. Mas assim que tiver um tempinho eu dou uma olhada, ja no NHibernate já tem um esquema da propria biblioteca pra fazer. |
Dando uma olhada melhor neste tópico vi que um dos pontos para utilização desse cara é a fuga da obsessão por tipos primitivos e então fez mais sentido por mim. Ex.: Ao inves de : Cnpj no ultimo é uma classe a parte, com todas as regras de validações que um Cnpj tem que ter, e pode ser reutilizado em toda classe que tem um Cnpj. O ponto dos ORMs eu realmente não sei dizer. |
Gostei do exemplo do Lessio, mas que tal utilizar struct ao invés de classe? |
Struct parece ser o ideal mesmo, pensei nisso quando vi a explicação do Baltieri sobre esses caras, mas ele utiliza classe. |
Um pattern muito legal, que as vezes esquecemos de usar o Value Object ou VO, em resumo eles são objetos sem identidade conceitual, eles existem para compor outros objetos, um exemplo disso é o Datetime ou o String ou o próprio Guid.
Existem algumas premissas para Value Objects:⚠️
Algumas vantagens ❇️
No nosso contexto um VO interessante seria o Checkout:
Value Objects
Trabalhando com Value Objects
Implement Value Objects
The text was updated successfully, but these errors were encountered: