Skip to content
Marcelo de casa edited this page Oct 24, 2019 · 8 revisions

Fluent Architecture

Ferramentas necessárias:

  • Visual Studio 2017/2019 ou Visual Studio Code

Os seguintes frameworks são compatíveis:

  • Net Core 2.2
  • Net Core 3.0 (recomendado)

Exemplificamos por meio um projeto, uma api simples. O código fonte desse exemplo está dispoível aqui: SimpleHelloWorld

Fazendo uso de uma única entidade e tendo acesso a vários end-points.

Seguem os passos para o desenvolvimento desse projeto:

1. Criação de um novo projeto do tipo Asp.Net Core - API

2. Instalação dos pacotes da arquitetura

Install-Package Fluent.Architecture.Core
Install-Package Fluent.Architecture.Core.Doc
Install-Package Fluent.Architecture.EntityFramework
Install-Package Fluent.Architecture.EntityFramework.SqLite
Pacote Recurso
Core O núcleo da arquitetura
Core.Doc O pacote de documentação da API
EntityFramework O pacote de dependências do Entity Framework
EntityFramework.SqLite O pacote de dependências do Entity Framework para SqLite

3. Inicialização da arquitetura

using Fluent.Architecture;
using Fluent.Architecture.EntityFramework;
using Fluent.Architecture.EntityFramework.SqLite;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        var jsonSerializerSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };

        /* 1. Startup Architecture */
        services
            .AddMvc()
            .AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver())
            .AddFluentArchitecture(jsonSerializerSettings)
            .UseEntityFramework()
            .AddConnectionString("Data Source=SimpleHelloWorld.db;", createDatabaseIfNotExists: true, typeof(EfContextSqLite))
            .Build()
            .AddFluentDoc();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseRouting();
        app.UseEndpoints(endpoints => endpoints.MapControllers());

        /* 2. Use Architecture documentation */
        app.UseFluentDoc();
    }
}
Método Recurso
AddFluentArchitecture Indica o início da arquitetura
UseEntityFramework Indica o uso de Entity Framework pela arquitetura
AddConnectionString Adiciona uma conexão de banco de dados à arquitetura. Vaja as opções de conexão em Conexões de banco de dados
Build Valida a arquitetura e inicializa os tipos dinâmicos
AddFluentDoc Indica o início da documentação para API
UseFluentDoc Inicializa a documentação de API

4. Criação de uma entidade

using Fluent.Architecture.Core.Models;
using System.ComponentModel.DataAnnotations;

public class User : FluentEntity
{
    [Key]
    public long Code { get; set; }

    public string Email { get; set; }

    public string Name { get; set; }
}

FluentEntity Indica que essa é uma entidade real para a arquitetura. Entidades reais são automaticamente mapeadas para o banco de dados e API. Veja mais sobre entidades em Entidade.

Ao executar essa aplicação, um end-point é disponibilizado no endereço: http://localhost:5000/FluentDoc

Ao acessar o end-point, percebe-se que um serviço do tipo User se torna disponível, de forma a permitir acesso a vários endpoints dessa entidade.

Segue alguns exemplos de end-points disponíveis:

http://localhost:5000/api/User/ExampleData

{
    "code":672948546,
    "email":"JOYJK8IjlB2R31EMLuIbhp1YdRAVnknitpr8uhISttDWtBSzzmDJIFucVAo17w5B",
    "name":"WUhNJEamlzqwmeoc8KeAgeZn4Pmu1PT5xB8ZcEpuLagSX6y0VM1xS5e132R3bptW"
}

http://localhost:5000/api/User/Count

{
    "data": 0
}

http://localhost:5000/api/User/List

{
    "pagination": {
        "totalQuantityOfItems": 0,
        "startAtZero": true,
        "skip": 0,
        "itemsPerPage": 20,
        "currentPage": 0,
        "numberOfPages": 0
    },
    "data": []
}

Ao acessar pela primeira ver um end-point que necessida de acesso ao banco de dados, um banco de dados é criado de acordo com a string de conexão fornecida

Está tudo pronto para iniciar o trabalho.


Não é obrigatória a criação de mais nenhum arquivo para o funcionamento básico da entidade User, mas se for necessário tratar uma regra de validação, regra de negócio, ou algo mais específico, faz-se necessário criar itens customizador. Veremos como criar cada um deles mais adiante.

É necessário entender cada ponto da arquitetura para executar com sucesso os procedimentos necessários para o desenvolvimento de um sistema limpo e bem feito com ela. Vamos fazer uma abordagem mais detalhada nos próximos tópicos.

Sempre no rodapé da página será apresentado o item que deve ser visto após o atual para facilitar a sequência de atendimento.

Para facilitar o fluxo de aprendizado, sempre que uma informação não necessária para o entendimento geral da arquitetura, esse será marcado como Referência. Veja um exemplo abaixo:

Referência: Informações de referência são para consulta em momentos de necessidade e não para aprendizado imediato.


Pra prosseguir, veja o item Entidade

Clone this wiki locally