-
Notifications
You must be signed in to change notification settings - Fork 0
Entidade
Sempre que for necessário representar um conceito, uma classe de valor, ou um objeto que será salvo no banco de dados, a arquitetura representa esse item como Entidade.
Todas as entidades devem herdar de FluentEntity ou superiores. Para que a arquitetura consiga tratar os dados de forma homogênea, faz-se necessário herdar sempre que possível de FluentEntity.
Vamos a um exemplo da entidade User.
Vaja a hierarquia:
User < FluentEntity < BaseEntity
A implementação fica como a seguir:
public class User: FluentEntity
{
public int Id { get; set; }
public string Login { get; set; }
public string Name { get; set; }
}Referência: Toda entidade que represente um objeto que será salvo no banco de dados deve ter um Id para que o orquestrador de dados da arquitetura consiga individualizar os dados de representação da entidade, portanto, uma propriedade do tipo que represente um identificador é obrigatória. Quando o Entity Framework estiver em uso, o Id deve ser Int, quando for RavenDB, o Id deve ser Guid. Caso o nome da propriedade não possa ser Id, deve-se usar um atributo para identifica-lo como chave da entidade.
public class User: FluentEntity { [Key] public int PersonId { get; set; } }É possível também definir chave composta. Nesse caso, faz-se necessário informar a ordem das chaves. Veja um exemplo:
public class User : FluentEntity { [Key, Column(Order = 0)] public int PersonId { get; set; } [Key, Column(Order = 1)] public int PersonType { get; set; } }
Entidades que herdem de FluentEntity serão adicionadas no contexto da aplicação para operações com banco de dados.
O mapeamento para o banco de dados será feito de forma automática, portando, caso o nome da tabela ou coluna do banco de dados não seja igual ao nome da propriedade, faz-se necessário decorar a entidade com alguns atributos conforme exemplo abaixo:
using System;
using System.ComponentModel.DataAnnotations.Schema;
using Fluent.Architecture.Model;
namespace Fluent.Architecture.Sample.Service
{
[Table("users")]
public class User: FluentEntity
{
[Key]
public int PersonId { get; set; }
[Column("registration_date")]
public virtual DateTime RegistrationDate { get; set; }
}
}Note que estamos usando
Table: pra definir o nome da tabela ou view.
Key: pra definir que é a chave primária da tabela.
Column: pra definir o nome da coluna no banco de dados referente a essa propriedade
Caso deseja criar entidades que não tenham interação com banco de dados, existem três formas de se fazer.
- Criando uma classe abstrata que herde de FluentEntity.
public abstract class Reports : FluentEntity
{
public int DataCount { get; set; }
}- Criando uma classe concreta que herde diretamente de BaseEntity. Veja a hierarquia:
User < BaseEntity
public class Reports : BaseEntity
{
public int DataCount { get; set; }
}- Fazendo uso do atributo NotDbEntity.
[NotDbEntity]
public class Reports : FluentEntity
{
public int DataCount { get; set; }
}Note que esse atributo não propaga para quem herde de Reports, Somente é válido para essa classe em específico.
Se deseja propagação, utilize o modelo de herança de BaseEntity.
Pra prosseguir, veja o item Especificação
Entidades | Controller | Serviço | Especificações | Propagação | Validação | Repositório