¿Cómo implementar la localización en el patrón DDD – Capa de Infraestructura/Persistencia?
Estoy trabajando en una plataforma de blogs en .NET Core y uno de los requisitos clave es tener diferentes traducciones basadas en el idioma seleccionado por el usuario. Está claro para mí que la mayoría de esta parte pertenece a la capa de interfaz de usuario, pero quiero permitir a los bloggers enviar diferentes traducciones de sus publicaciones por sí mismos.
Hasta ahora, he modificado mi Dominio
para que ahora contenga la propiedad Idioma
y también he creado el atributo Localizado
para marcar las propiedades que son multilingües. En mi enfoque, quiero mantener toda la lógica relacionada con la localización en la capa de Infraestructura
para que guarde/cargue las traducciones adecuadas desde/hacia otra tabla que contenga las traducciones automáticamente sin que la capa de Aplicación
(o servicios) lo sepa.
También estoy implementando el patrón de UnitOfWork
y normalmente usaría repositorios a través de él, como sigue: UnitOfWork.BlogPosts.Add(post)
y después de que todas las operaciones estén hechas: UnitOfWork.CommitChanges()
, pero asumo que ahora UnitOfWork
contendría tanto el repositorio para BlogPost
como para Localization
y toda la lógica de guardar/cargar datos localizados tendría que ser implementada en un UnitOfWork
, por lo que tendría que llamar a un método que administre ambos repositorios, como este: UnitOfWork.AddBlogPost(post)
(también la interfaz IUnitOfWork
requeriría estos métodos).
Entonces mi pregunta es: ¿es un buen enfoque de diseño y es el UnitOfWork
un lugar adecuado para implementar tal lógica? Quiero mantenerlo lo más automatizado posible y si no causa problemas que actualmente no conozco, mantenerlo directamente en una capa de persistencia.
Editar: Mi segunda idea sería simplemente mantener los dos repositorios en UnitOfWork
e implementar el guardado/carga de BlogPost
+ Localization
en una capa de Aplicación
(en controladores de comandos y consultas utilizando el patrón CQRS). Pero desafortunadamente, de esta manera tendría que implementar la misma lógica para guardar/cargar para cada comando y consulta…
davy.ai
Solución para una plataforma de blogs multilingüe en ASP.NET Core
Como experto en TI especializado en asp.net-core, localización, microservicios y diseño impulsado por dominios, sugiero la siguiente solución para una plataforma de blogs multilingüe en .NET Core:
Enfoque:
Para lograr la funcionalidad deseada, haría los siguientes cambios en el proyecto:
Implementación:
Para implementar este enfoque, seguiría los siguientes pasos:
Mejor enfoque de diseño:
La solución presentada anteriormente es un buen enfoque de diseño ya que mantiene la lógica relacionada con la localización en la capa de Infraestructura y la mantiene lo más automatizada posible.
Además, el uso de “UnitOfWork” para gestionar ambos repositorios asegura que toda la lógica de guardar/cargar datos localizados esté separada de la capa de Aplicación (o servicios). Este enfoque garantiza una separación clara de responsabilidades, que es esencial para mantener una base de código bien estructurada y escalable.
En general, recomendaría altamente la solución propuesta como una forma efectiva y eficiente de implementar una plataforma de blogs multilingüe en .NET Core.