Estoy tratando de construir un proyecto usando la arquitectura limpia, como se describe aquí . Encontré un gran artículo sobre cómo hacer esto en Go .
El ejemplo es muy simple, y el autor coloca su código en paquetes nombrados en función de la capa en la que se encuentran. Me gusta la idea del tío Bob de que la arquitectura de una aplicación debe comunicar claramente su intención . Por lo tanto, me gustaría que mi aplicación tenga paquetes de nivel superior basados en áreas de dominio. Entonces mi estructura de archivos se vería así:
/Customers
/domain.go
/interactor.go
/interface.go
/repository.go
/... the same for other domain areas
El problema con esto es que varias capas comparten el mismo paquete. Por lo tanto, no está del todo claro cuando se viola la regla de dependencia, porque no tiene importaciones que muestren qué depende de qué.
Vengo de un fondo de Python, donde esto no sería un gran problema, porque puedes importar archivos individuales, por lo que customers.interactor
podría importar customers.domain
.
Podríamos lograr algo similar en gO al anidar paquetes, de modo que el paquete de los clientes contenga un paquete de dominio y un paquete de interacción, y así sucesivamente. Esto se siente torpe, y los paquetes con nombres idénticos pueden ser molestos de tratar.
Otra opción sería hacer múltiples paquetes por área de dominio. Uno llamado customer_domain, otro llamado customer_interactor, etc. Pero esto también se siente sucio. No encaja bien con las pautas de nomenclatura de paquetes de Go, y parece que todos estos paquetes separados deberían agruparse de alguna manera, ya que sus nombres tienen un prefijo común.
Entonces, ¿cuál sería un buen diseño de archivo para esto?