{"id":16255576,"url":"https://github.com/gquemener/awesome-domain-modeling","last_synced_at":"2025-10-11T08:33:28.292Z","repository":{"id":254835743,"uuid":"775545984","full_name":"gquemener/awesome-domain-modeling","owner":"gquemener","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-24T13:19:21.000Z","size":291,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-25T03:02:47.314Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"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/gquemener.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-21T15:34:41.000Z","updated_at":"2025-09-03T20:48:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"e72cd73c-dfa1-4d64-ae33-5c7018acdf84","html_url":"https://github.com/gquemener/awesome-domain-modeling","commit_stats":null,"previous_names":["gquemener/awesome-domain-modeling"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gquemener/awesome-domain-modeling","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gquemener%2Fawesome-domain-modeling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gquemener%2Fawesome-domain-modeling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gquemener%2Fawesome-domain-modeling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gquemener%2Fawesome-domain-modeling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gquemener","download_url":"https://codeload.github.com/gquemener/awesome-domain-modeling/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gquemener%2Fawesome-domain-modeling/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006611,"owners_count":26084148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-10-10T15:43:24.486Z","updated_at":"2025-10-11T08:33:28.286Z","avatar_url":"https://github.com/gquemener.png","language":null,"funding_links":[],"categories":["Uncategorized","frontend"],"sub_categories":["Uncategorized"],"readme":"# Awesome Domain Modeling\n\n## Introduction\n\nModeling is the act of building a simplification of a reality in order to solve a problem. Too simple and it will not solve the problem, too complex and it will become the new problem. A day-to-day example is a map. Tons of different kinds of maps exist (world map, city map, bicycle map, maritime map, subway map), and each is aiming to solve a very specific problem. Every version intentionaly omits details and a single map containing all those informations would most likely be unreadable and require an extensive amount of effort to use!\n\n\u003e [!NOTE]\n\u003e Whether you’re _modelling_ or _modeling_, you’re doing the same thing. The only difference is in the spelling—the one with the single L is preferred in the United States, while the one with two Ls is preferred everywhere else. [Source](https://www.grammarly.com/blog/modeling-or-modelling/)\n\nDomain Modeling is a technic aiming to resolve a business problem through the design of a set of small, well-shaped, models, collaborating with each others, based on the discovery and understanding of a (sub-)domain.\n\nIt is closely related to Domain-Driven Design and is part of the Tactical side of this approach.\n\nIt is NOT related to any language, framework or paradigm.\n\nOther modeling technics includes \"data-driven modeling\" (focusing on database table structure), \"class-driven modeling\" (for UML based projects) or even [God Object](https://en.wikipedia.org/wiki/God_object) (which can be compared to the multi-purposes map that was described at the beginning of this section).\n\n## Books\n\n- [Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# - Scott Wlaschin](https://pragprog.com/titles/swdddf/domain-modeling-made-functional/)\n- [Effective Aggregate Design - Part I: Modeling a Single Aggregate - Vaughn Vernon](./docs/vernon_2011_1.pdf)\n- [Effective Aggregate Design - Part II: Making Aggregates Work Together - Vaughn Vernon](./docs/vernon_2011_2.pdf)\n- [Effective Aggregate Design - Part III: Gaining Insight Through Discovery - Vaughn Vernon](./docs/vernon_2011_3.pdf)\n\n## Articles\n\n- [Domain Model Pattern - Udi Dahan](https://udidahan.com/2007/04/21/domain-model-pattern/)\n- [Anemic Domain Model - Martin Fowler](https://www.martinfowler.com/bliki/AnemicDomainModel.html)\n- [Doctrine ORM - Adding behavior to Entities](https://www.doctrine-project.org/projects/doctrine-orm/en/3.2/tutorials/getting-started.html#adding-behavior-to-entities)\n- [What time can teach us about models - Stijn Vannieuwenhuyse](https://aardling.eu/en/insights/what-time-can-teach-us-about-models)\n\n## Videos\n\n- [Domain Modelling - Yves Reynhout - DDD Europe 2019](https://www.youtube.com/watch?v=tjiuDQbkRFY) 19:14\n- [Making impossible state impossible - Richard Feldman](https://www.youtube.com/watch?v=IcgmSRJHu_8) 25:05\n- [Event Sourcery : A video course that covers the fundamentals of reactive systems and event sourcing, both theoretical and practical - Shawn McCool](https://www.youtube.com/playlist?list=PLQuwqoolg4aI6v1GvtRg3NgT0PBBHVqii) approx. 04:00:00 (the six first videos give a very good idea of what building blocks are available)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgquemener%2Fawesome-domain-modeling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgquemener%2Fawesome-domain-modeling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgquemener%2Fawesome-domain-modeling/lists"}