{"id":15154376,"url":"https://github.com/lfcifuentes/ddd-go","last_synced_at":"2026-01-20T07:03:31.246Z","repository":{"id":242177678,"uuid":"805956949","full_name":"lfcifuentes/ddd-go","owner":"lfcifuentes","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-01T05:03:25.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T11:47:25.798Z","etag":null,"topics":["cobra","ddd-architecture","ddd-example","go","golang","mongo","viper"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lfcifuentes.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-26T00:26:27.000Z","updated_at":"2024-06-01T05:03:28.000Z","dependencies_parsed_at":"2024-06-01T05:48:37.425Z","dependency_job_id":null,"html_url":"https://github.com/lfcifuentes/ddd-go","commit_stats":null,"previous_names":["lfcifuentes/ddd-go"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lfcifuentes/ddd-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfcifuentes%2Fddd-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfcifuentes%2Fddd-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfcifuentes%2Fddd-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfcifuentes%2Fddd-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lfcifuentes","download_url":"https://codeload.github.com/lfcifuentes/ddd-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfcifuentes%2Fddd-go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28597985,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T02:08:49.799Z","status":"ssl_error","status_checked_at":"2026-01-20T02:08:44.148Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cobra","ddd-architecture","ddd-example","go","golang","mongo","viper"],"created_at":"2024-09-26T17:22:13.827Z","updated_at":"2026-01-20T07:03:31.218Z","avatar_url":"https://github.com/lfcifuentes.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go DDD Example\n\nThis is a repository to test the ddd pattern with go, based on what was published in [this](https://programmingpercy.tech/blog/how-to-domain-driven-design-ddd-golang/) post\n\n\n## Notes\n\n### Domain\nSe refiere a la área de conocimiento o actividad principal sobre la cual tu aplicación está construida.\n\n\n### Entity\nUna Entidad es un objeto del dominio que tiene una identidad única a lo largo del tiempo y entre diferentes instancias. Su identidad es lo que la distingue de otras entidades, incluso si tienen los mismos atributos. Las entidades tienen las siguientes características:\n\n- **Identidad Única:** Cada entidad debe tener un identificador único (por ejemplo, ID).\n- **Estado Mutable:** Las entidades pueden cambiar su estado a lo largo del tiempo.\n- **Igualdad por Identidad:** Dos entidades son iguales si tienen el mismo identificador, sin importar los otros atributos.\n\n### Value Object\nUn Value Object es un objeto que no tiene identidad propia. En lugar de ser definido por un identificador único, un Value Object se define por sus atributos. Los Value Objects son inmutables y su igualdad se basa en la comparación de sus atributos.\nCaracterísticas Clave de los Value Objects:\n\n- **Inmutabilidad:** Una vez creado, el estado de un Value Object no puede cambiar. Si necesitas un Value Object diferente, debes crear uno nuevo.\n- **Sin Identidad:** Los Value Objects no tienen identidad propia. Dos Value Objects son iguales si todos sus atributos son iguales.\n- **Comparación por Valor:** La igualdad se determina comparando los valores de sus atributos, no por una identidad única.\n- **Encapsulación de Conceptos:** Los Value Objects encapsulan conceptos o atributos del dominio que no necesitan identidad propia.\n\nLos Value Objects son frecuentemente utilizados dentro de los Agregados para encapsular y modelar atributos o conceptos del dominio que no necesitan identidad propia.\n\n### Aggregate\nUn Agregado es un patrón que define un grupo de Entidades que están relacionadas entre sí y que deben ser tratadas como una única unidad de consistencia para propósitos de datos. Un agregado tiene las siguientes características:\n\nRaíz del Agregado (Aggregate Root): Es la entidad principal del agregado. Todos los accesos externos al agregado deben hacerse a través de esta entidad.\nConsistencia Interna: Las reglas de negocio y las invariantes se aplican a nivel del agregado para garantizar la consistencia interna.\nEncapsulamiento: Las entidades dentro del agregado solo pueden ser modificadas a través de la raíz del agregado.\n\n### Factories\nEl patrón de fábrica es un patrón de diseño que se utiliza para encapsular lógica compleja en funciones que crean la instancia deseada, sin que la persona que llama sepa nada sobre los detalles de implementación.\n\n### Repository\nEs un patrón que se basa en ocultar la implementación de la solución de almacenamiento/base de datos detrás de una interfaz. Esto nos permite definir un conjunto de métodos que deben estar presentes y, si están presentes, están calificados para usarse como repositorio.\n\n### Services\nUn servicio vinculará todos los repositorios débilmente acoplados en una lógica empresarial que satisfaga las necesidades de un determinado dominio.\n\n\n## CMD\n\n#### Testing\n\nCorrer los test\n```bash\ngo test -cover ./...\n```\nLimpiar la cache\n```bash\ngo clean -testcache \n```\nVer el coverage de los test\n```bash\ngo test  ./... -coverprofile=coverage.out\n``` \n```bash\ngo tool cover -html=coverage.out\n```\n\n#### Run Server\n\nRun development server \n```bash\ngo run main.go serve\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfcifuentes%2Fddd-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flfcifuentes%2Fddd-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfcifuentes%2Fddd-go/lists"}