Portada » Cómo crear un blog desde cero hasta producción con .NET 6

Cómo crear un blog desde cero hasta producción con .NET 6

La idea de este proyecto es crear una versión 1.0 de un blog escrito desde cero hasta subirlo a producción a diferentes posibles proveedores de hostings, para no vernos limitados y elegir la opción que mejor se adapte a nuestras necesidades. Todo lo que hagamos quedará subido a Github y estará abierto para que cualquiera pueda cogerlo.

Si tienes ideas sobre cómo mejorarlo, extender funcionalidades o cosas que te gustaría que el blog tuviera, no dudes en hacérmelo saber, pues una vez tengamos la versión 1.0, la idea es construir a partir de ahí diferentes funcionalidades.

Aquí os iré dejando los temas que vaya creando para el blog en orden. Esta lista puede cambiar y ampliarse o reducirse, pues por ahora sólo será un esbozo de las diferentes partes. A priori, los temas los separaré por las capas a las que pertecen inicialmente, pero según avancemos, tendré que afectar a todas las capas, por lo que volveremos a unificar la ruta en el apartado «Blog».

Pre-requisitos

  • Conocimiento básico de C# 9 en adelante
  • Entender los pilares básicos de la Programación Orientada a Objetos (Abstracción, Herencia, Polimorfismo y Encapsulamiento)
  • Idealmente conocer los principios SOLID

General

  1. Características de la versión 1.0 del Blog
  2. Entendiendo las capas de Dominio, Infraestructura, Aplicación y UI

Configuración inicial

  1. ¿Cómo subir a Github un repositorio con múltiples proyectos?
  2. Creando solución en blanco, explicación de las carpetas, librerías de clases y tests
  3. ¿Cómo relacionar las capas de una solución con múltiples proyectos?
  4. ¿Cómo establecer uno o varios proyecto de inicio?

Configuración Dominio

  1. ¿Qué entendemos por una Entidad?
  2. ¿Qué es una capa de dominio anémica?
  3. ¿Qué son las lógicas de negocio?
  4. Entendiendo y definiendo las lógicas de negocio de nuestro Blog
  5. Definiendo las primeras entidades del blog y relaciones en base a las lógicas de negocio
  6. ¿Por qué utilizar el método factoría para crear nuestros objetos?
  7. Excepciones personalizadas vs. Objeto Result<T>
  8. Definiendo el objeto Result<T>
  9. Creando Tests Unitarios para nuestras entidades con XUnit
  10. ¿Qué entendemos por Value Object y para qué sirven?
  11. Definiendo interfaces genéricas y clases utilitarias

Configuración Infraestructura

  1. Appsettings.json vs. Clase C# para configuración y seguridad
  2. Creando un archivo de configuración general para ADO.NET
  3. Configurando Entity Framework
  4. Creando un repositorio base con ADO.NET
  5. Creando un repositorio base con Entity Framework
  6. Creando la base de datos y tablas en SQL Server con SSMS
  7. Implementando repositorios CRUD para nuestras entidades con ADO.NET
  8. Definiendo tests de integración para nuestros repositorios ADO.NET
  9. Implementando repositorios CRUD para nuestras entidades con Entity Framework
  10. ¿Cómo definir relaciones con Fluent API en Entity Framework?
  11. ¿Cómo especificar el tamaño de nuestros campos con Fluent API en Entity Framework?
  12. ¿Cómo se definen dos Primary Keys para tablas intermedias en Entity Framework?
  13. ¿Cómo se realizan las migraciones en Entity Framework?
  14. ¿Cómo añadir datos por defecto en nuestras tablas con Entity Framework?
  15. Definiendo tests de integración para nuestros repositorios Entity Framework

Configuración Servicios

  1. Cómo crear Servicio Logger para almacenar excepciones en la base de datos
  2. Cómo crear un Servicio para encriptar contraseñas con hashing y salting
  3. Definiendo las interfaces de nuestros Mappers

Configuración UI

  1. ¿Qué es y para qué sirve el IServiceCollection?
  2. Extendiendo IServiceCollection para incorporar la configuración de las otras capas al proyecto MVC
  3. ¿Qué son los Environments y cómo configurar un nuevo environment?
  4. ¿Cómo acceder al Environment antes de builder.Build() para configurar los servicios?
  5. ¿Qué es el patrón MVC?
  6. Entendiendo el flujo de una petición en MVC
  7. ¿Cómo funciona el routing, mapear rutas y añadir rutas personalizadas en nuestro controlador?
  8. ¿Qué son los «Layout», para qué sirven y cómo crearlos?
  9. ¿Qué son las secciones y para qué sirven?
  10. ¿Qué son las PartialViews y en qué se diferencian de las Views?
  11. ¿Qué son y cuál es la diferencia entre ViewBag, ViewData y TempData?
  12. Creando un sistema de notificaciones interno con TempData y PartialViews

Blog

  1. ¿Cuál es la diferencia entre UseAuthorization y UseAuthentication?
  2. Configuración del Program.cs para la autenticación por Cookies
  3. ¿Qué es un Data Transfer Object (DTO)?
  4. ¿Qué es y para qué sirven el ModelBinding, DataAnnotations y los ViewModels?
  5. Implementando el LoginController usando ModelBinding con WriterVM
  6. Procesando y validando el inicio de sesión de nuestros usuarios
  7. Definiendo tests de integración para nuestro LoginController

Despliegue

Ideas para futuras versiones

☐ Crear un sistema para que los lectores puedan suscribirse y recibir newsletters.

☐ Añadir la posibilidad de que los lectores dejen comentarios.