-
Notifications
You must be signed in to change notification settings - Fork 1
Home
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:
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 |
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 |
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
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
Entidades | Controller | Serviço | Especificações | Propagação | Validação | Repositório