gasparoberti / ApiRest

API REST utilizando .NET 5. Arquitectura en capas y utilización del patrón Repository. EntityFramework para la persistencia y JWT con Identity para la seguridad de nuestra API.
0 stars 0 forks source link

1-arquitectura #1

Closed gasparoberti closed 2 years ago

gasparoberti commented 2 years ago

Definición de bibliotecas de clases que conformarán la arquitectura del proyecto.

Screenshot_187

gasparoberti commented 2 years ago

Se crearon los proyectos de cada capa (bibliotecas de clases) y sus respectivas referencias.

Por ejemplo para el proyecto WebApi se agregan las referencias a los proyectos Application, Services y Entities.

Screenshot_188

Las referencias que se agregan se pueden observar en el .csproj del proyecto al que se le están agregando las referencias, en este caso sería WebApi.csproj

Screenshot_189

gasparoberti commented 2 years ago

Como hay 4 operaciones que se van a necesitar en todas las capas (crud), para no repetir código que sea lo mas reutilizable posible se crea una interfaz en una nueva capa de abstracciones que luego se utilizará para hacer la inversión de control (las referencias o ... siempre deberían ser a las clases de mas alto nivel para lograr mayor nivel de abstracción).

La clase Application implementa la interfaz IApplication que a su vez implementa la interfaz ICrud.

Lo mismo que se hace con la capa Application se hace con la capa Repository.

gasparoberti commented 2 years ago

Application tiene un constructor en el que se inyecta un repositorio genérico (inversión de control: en lugar de crear la instancia del repositorio adentro de la aplicación se inyecta la dependencia ya instanciada creada en su respectivo lugar, el contenedor).

Screenshot_190

Luego usando el patrón Adapter adaptaremos la aplicación al repositorio en los cuatro métdos del crud.

Screenshot_191

De manera similar se hace la adaptación en el repositorio. Se configura la inyección de dependencia para poder utilizarlo en algún endpoint de la app. La conf se hace en el Startup.cs

Screenshot_192

gasparoberti commented 2 years ago

Creamos la entidad footballteam y su respectivo controlador con un constructor que recibe por parámetro la aplicación de Footballteam.

Después creamos un método Get en el controlador que devuelva un objeto footballteam que creamos. Probando en postman o en swagger en la url https://localhost:5001/api/FootballTeam obtenemos el valor del objeto que estamos creando en el get.

Screenshot_194

Screenshot_193