{"id":25893459,"url":"https://github.com/jenkoian/ddd-house","last_synced_at":"2026-02-18T20:01:56.834Z","repository":{"id":26242208,"uuid":"29689148","full_name":"jenkoian/ddd-house","owner":"jenkoian","description":"🏠 Building a house with DDD","archived":false,"fork":false,"pushed_at":"2015-01-22T16:58:51.000Z","size":2366,"stargazers_count":38,"open_issues_count":1,"forks_count":3,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-04-08T09:06:19.615Z","etag":null,"topics":["ddd","domain-driven-design"],"latest_commit_sha":null,"homepage":"","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/jenkoian.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}},"created_at":"2015-01-22T16:52:05.000Z","updated_at":"2024-04-08T09:06:19.615Z","dependencies_parsed_at":"2022-07-10T12:47:37.607Z","dependency_job_id":null,"html_url":"https://github.com/jenkoian/ddd-house","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkoian%2Fddd-house","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkoian%2Fddd-house/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkoian%2Fddd-house/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkoian%2Fddd-house/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jenkoian","download_url":"https://codeload.github.com/jenkoian/ddd-house/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241576890,"owners_count":19984939,"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","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":["ddd","domain-driven-design"],"created_at":"2025-03-02T21:36:15.057Z","updated_at":"2025-10-16T20:53:53.488Z","avatar_url":"https://github.com/jenkoian.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"DDD House\n=========\n\nThis repository is used to 'build a house with DDD'. It's a means of getting my head around a few concepts I've been learning recently. Such as the following:\n\n* [Modelling by example](http://everzet.com/post/99045129766/introducing-modelling-by-example)\n* [Domain-Driven-Design](http://en.wikipedia.org/wiki/Domain-driven_design)\n* Commands and Handlers\n* Command Bus\n* Domain Events\n* [Hexagonal Architecture](http://alistair.cockburn.us/Hexagonal+architecture)\n* BDD (using Behat \u0026 PHPSpec)\n* [Named constructors](http://verraes.net/2014/06/named-constructors-in-php/)\n* [Value Objects](http://verraes.net/2014/06/named-constructors-in-php/)\n\nThe biggest thing I aim to achieve is the separation of layers. Using modelling by example to work from the middle out. Cleanly separating the domain from the rest of the application. \n\nI aim to do this iteratively with each stage of my work in a separate branch. For example, version1 branch may be just setting up some basic behat features through to a fully featured domain layer, with infrastructure supporting a front end that communicates to the domain.\n\nHow to use this repo\n--------------------\n\nView each branch along with the notes in the commit message to see what each commit adds.\n\n* [Version0](https://github.com/jenkoian/ddd-house/commit/ba1160626505e1f3a5df963bfa974178e6fc391d)\n* [Version1](https://github.com/jenkoian/ddd-house/commit/f5a95111f479785454cf6cf5b765ca20cb61475b)\n* [Version2](https://github.com/jenkoian/ddd-house/commit/f3fc5150db91a0ad1be9d56eb8b0af72a48f0026)\n* [Version3](https://github.com/jenkoian/ddd-house/commit/9abb0ec5c8d7918537ba84ed28b999798414aab4)\n* [Version4](https://github.com/jenkoian/ddd-house/commit/5661411bc0a6f5a0b942f9922150b045709be1c3)\n* [Version5](https://github.com/jenkoian/ddd-house/commit/3dab522b244512d6fbfad70d27d947819d9c16b2)\n* [Version6](https://github.com/jenkoian/ddd-house/commit/bc7dc0840e634ab22475aee1d5b97a7ad5221427)\n* [Version7](https://github.com/jenkoian/ddd-house/commit/f68fd0975ead6a6a1177732491ed3d29ba021880)\n* [Version8](https://github.com/jenkoian/ddd-house/commit/d125b4a7f5e2ab55ce0910c7c4bd1d240d336f68)\n* [Version9](https://github.com/jenkoian/ddd-house/commit/1cd52fe156bfd5a93118aac5348988d08142d028)\n* [Version10](https://github.com/jenkoian/ddd-house/commit/56319d09ada9b9a08fe682d697a3973bf36d6bb2)\n* [Version11](https://github.com/jenkoian/ddd-house/commit/a81431f281b154644c0f899afb64ace67b74d50d)\n* [Version12](https://github.com/jenkoian/ddd-house/commit/802936f09a1c85c06c7b5b572f45d4e76b0b6b69)\n* [Version13](https://github.com/jenkoian/ddd-house/commit/50fce972753cab2f914a4569762bb4ba99d25b35)\n* [Version14](https://github.com/jenkoian/ddd-house/commit/2712efbf1e3719b0295c3cc547176ad405beb262)\n* [Version15](https://github.com/jenkoian/ddd-house/commit/83cbbd8651af8514211d0c6198b9512e10cb5211)\n* [Version16](https://github.com/jenkoian/ddd-house/commit/2355c7582e8260d7cb03401bfad48fcc30174fe6)\n* [Version17](https://github.com/jenkoian/ddd-house/commit/60f9b70ab227785a5e503a4ed88c7da01d98adc9)\n* [Version18](https://github.com/jenkoian/ddd-house/commit/e4ace656623d57cb78b6c8e5dc9b870b33ef4186)\n* [Version19](https://github.com/jenkoian/ddd-house/commit/0952bb45115bb90786b0b685a0ce04de41cf7091)\n* [Version20](https://github.com/jenkoian/ddd-house/commit/b8ebbea1bf200e399661f252acc4aee9ff7d2da9)\n* [Version21](https://github.com/jenkoian/ddd-house/commit/73bb68c1d9fe6a9d125191b3e535af3fb1165c09)\n* [Version22](https://github.com/jenkoian/ddd-house/commit/2c2ec90ebf0d55b5bf30366df99a1dfd31e14077)\n* [Version23](https://github.com/jenkoian/ddd-house/commit/dcb675d273260b6a9e0af7948a26945ca2605a01)\n* [Version24](https://github.com/jenkoian/ddd-house/commit/4fdc5ed94368ef1656ea80e6fde634a58020cc04)\n* [Version25](https://github.com/jenkoian/ddd-house/commit/a9ca03a9d882cf03d1e8ca48f17f9780a62ec1f5)\n\nDemo app\n--------\n\nThe demo app is viewable at [https://dddhouse.herokuapp.com/](https://dddhouse.herokuapp.com/)\n\nCLI app\n-------\n\nA gif of the CLI version in action:\n\n![](dddhouse-cli.gif)\n\nInspiration\n-----------\n\nAs mentioned the blog post by Everzet on ['Modelling by example'](http://everzet.com/post/99045129766/introducing-modelling-by-example) was a big inspiration behind this kind of approach. Definitely read it. Funnily enough, he has been working on a similar repository which I wasn't aware of until recently called ['pick-my-talks'](https://github.com/MarcelloDuarte/pick-my-talks). It doesn't cover things like commands and handler but is probably a better example of modelling by exmaple than this, so definitely recommend checking that out also.\n\nOther sources of inspiration include:\n\n* This excellent talk by Ross Tuck: [Models and Service Layers](https://www.youtube.com/watch?v=ajhqScWECMo)\n\nTODO\n----\n\n* Add acceptance tests as a next step.\n* Look into possibility of adding some kind of persistence of house state.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenkoian%2Fddd-house","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjenkoian%2Fddd-house","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenkoian%2Fddd-house/lists"}