Como se menciono anteriormente vamos a necesitar:
En los titulos encontraran los videos explicando el contenido.
Comando | Resultado |
---|---|
dotnet new sln |
Creamos una solucion (principalmente util para VisualStudio, cuando queremos abir la solucion y levantar los proyectos asociados) |
dotnet new webapi -n "Nombre del proyecto" |
Crear un nuevo proyecto del template WebApi |
dotnet sln add |
Asociamos el proyecto creado al .sln |
dotnet sln list |
Vemos todos los proyectos asociados a la solucion |
dotnet new classlib -n "Nombre del proyecto" |
Crea una nueva libreria (standard) |
dotnet add "Nombre del proyecto 1" reference "Nombre del proyecto 2" |
Agrega una referencia del Proyecto 2 al Proyecto 1 |
dotnet add package "Nombre del package" |
Instala el Package al proyecto actual. Similar a cuando se agregaban paquetes de Nuget en .NET Framework |
dotnet clean |
Borra lo compilado |
dotnet build |
Compila y genera los archivos prontos para ser desplegados |
dotnet run |
Compila y corre el proyecto |
dotnet -h |
Ayuda para ejecutar un comando o para inspeccionar diferentes comandos |
No, no es necesario. Sin embargo, tener una trae varias utilidades:
- Si usamos Visual Studio 2019, es necesario crearla para levantar todos los proyectos dentro del IDE
- Aunque no usemos VS2019, tener una solucion permite crear/compilar/manejar todos los proyectos involucrados juntos, sin tener que correr cada uno, por ejemplo. Se maneja todo como una unica unidad.
Para mas informacion, se puede leer aquí
A continuación crearemos un proyecto de ejemplo, sobre el cual seguiremos trabajando y seguiremos agregandole funcionalidad.
dotnet new sln
dotnet new webapi -au none -n Moodle.WebApi
dotnet sln add Moodle.WebApi
dotnet new classlib -n Moodle.BusinessLogic
dotnet sln add Moodle.BusinessLogic
dotnet new classlib -n Moodle.DataAccess
dotnet sln add Moodle.DataAccess
dotnet new classlib -n Moodle.Domain
dotnet sln add Moodle.Domain
dotnet add Moodle.WebApi reference Moodle.DataAccess
dotnet add Moodle.WebApi reference Moodle.Domain
dotnet add Moodle.WebApi reference Moodle.BusinessLogic
dotnet add Moodle.DataAccess reference Moodle.Domain
dotnet add Moodle.BusinessLogic reference Moodle.Domain
dotnet add Moodle.BusinessLogic reference Moodle.DataAccess
Nos movemos a la carpeta WebApi (cd Moodle.WebApi
)
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.InMemory
Nos movemos a la carpeta dataaccess (cd Moodle.DataAccess
)
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.InMemory
Antes de comenzar a progamar, es importante saber como esta formado cada uno de los proyectos. Tenemos 3 grandes elementos (o conjuntos de) en el proyecto ademas de nuestro codigo.
X.csproj
Este es el archivo de configuracion del proyecto. Aqui se definen varias cosas como:
- Version del framework usado (netcore3.1 por ejemplo)
- Dependencias a otros proyectos dentro de una solucion y el path a ellos (por ejemplo
<ProjectReference Include="..\Homeworks.Domain\Moodle.Domain.csproj" />
indica que hay una diferencia el proyectoMoodle.Domain
) - Dependencias de paquetes externos de nuget. (Por ejemplo:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.2" />
indica que este proyecto utilizaEntityFrameworkCore
). Cuando se toma el proyecto nuevo, se utiliza esta informacion para bajar los archivos necesarios de nuget packages.
Este archivo vendria a tener una funcionalidad similar a la que tienen archivos similares en otros lenguajes/plataformas, como Javascript con el package.json
/bin
Aca se encuentran todos los archivos compilados. Cada vez que se hace dotnet run
o dotnet build
, se compila el proyecto y se generan los .dll
correspondientes. Lo mejor es ignorar de git esta carpeta
/obj
Son varios archivos que utiliza despues el compilador para compilar el proyecto. Son una especie de "archivos intermedios". Tambien conviene ignorar en git esta carpeta.
Agregaremos un poco de funcionalidad muy basica al sistema que tenemos para poder probar que este funcionando correctamente.
En Moodle.Domain
Crearemos la clase que representa a nuestros estudiantes, Student
.
using System;
using System.Collections.Generic;
namespace Moodle.Domain
{
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string StudentNumber { get; set; }
public List<Course> Courses { get; set; }
public Student()
{
this.Courses = new List<Course>();
}
}
}
using System;
namespace Moodle.Domain
{
public class Course
{
public int Id {get; set;}
public string Name {get; set;}
public List<Student> Students {get; set;}
public Course() {
this.Students = new List<Student>();
}
}
}
Crearemos una clase llamada StudentLogic
, la cual tiene la logica de nuestros estudiantes y la clase CourseLogic
, la cual tiene la logica de nuestros cursos.
using System;
using Moodle.Domain;
namespace Moodle.BusinessLogic
{
public class StudentLogic
{
public List<Student> GetAll()
{
return new List<Student>()
{
new Student()
{
Id = 0,
Name = "Daniel",
StudentNumber = "185082"
}
};
}
}
}
using System;
namespace Moodle.BusinessLogic
{
public class CourseLogic
{
}
}
Este proyecto sera donde tengamos los controllers. Estos tendran la responsabilidad de:
- Definir las rutas
- Obtener los datos que son enviados en las requests (ya sea por la URL, por headers, por el body, etc)
Primero crearemos la clase StudentController
y luego CourseController
. Dentro de StudentController
, agregaremos una unica ruta:
namespace Moodle.WebApi.Controllers
{
[Route("api/students")]
[ApiController]
public class StudentController : ControllerBase
{
private readonly StudentLogic studentLogic;
public StudentController()
{
this.studentLogic = new StudentLogic();
}
// GET api/values
[HttpGet]
public ActionResult GetAll()
{
return Ok(this.studentLogic.GetAll());
}
}
}
Esta ruta lo que hace es devolvernos la lista de estudiantes que esta creando StudentLogic
.
Para probarlo, podemos utilizar el browser. Si corremos dotnet run
dentro de Moodle.WebApi
, el proyecto se inicia. Si vamos a https://localhost:5001/api/students
podemos ver el estudiante que creamos.
Posible error que puede aparecer cuando se prueba desde el puerto 5001