{"id":21655874,"url":"https://github.com/dalssoft/modelapp","last_synced_at":"2025-03-20T04:46:27.109Z","repository":{"id":28886624,"uuid":"32411260","full_name":"dalssoft/modelapp","owner":"dalssoft","description":"A experiment for tools on DDD and Isomorphic JavaScript","archived":false,"fork":false,"pushed_at":"2015-03-17T20:31:43.000Z","size":152,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-25T06:26:11.905Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dalssoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-17T18:09:32.000Z","updated_at":"2015-03-17T20:31:44.000Z","dependencies_parsed_at":"2022-09-03T07:40:59.915Z","dependency_job_id":null,"html_url":"https://github.com/dalssoft/modelapp","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/dalssoft%2Fmodelapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalssoft%2Fmodelapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalssoft%2Fmodelapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalssoft%2Fmodelapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dalssoft","download_url":"https://codeload.github.com/dalssoft/modelapp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244554133,"owners_count":20471173,"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":[],"created_at":"2024-11-25T08:37:31.977Z","updated_at":"2025-03-20T04:46:27.087Z","avatar_url":"https://github.com/dalssoft.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# modelapp\nA experiment for tools on modeling using DDD and Isomorphic JavaScript.\n\n## Problem\n\n- Creating a testable, decoupled, business layer can be very costly due to the lack \nof popular interfaces or libraries that should suggests a common protocol between the \nother layers. As a example of the power of such protocol is Ruby on Rails.\n\n- Currently there are a incredible number of JavaScript modules for \ninfrastructure (as we call code not related to the business) to our disposal, \nbut on other hand there is almost none that helps with the business modeling per se.\n\n\n## Hypothesis\n\nTools (libs / modules) can make maintenance easier for decoupled business code \nby (1) suggesting a common interface for other layers and (2) by code reuse.\n\n## Goal \n\nFirst, create a simple application (with enough complexity) using vanilla JavaScript and applying the layers below:\n\n      ┌────────────────────────────────────┐\n      │   Presentation (MVC server, MVC    │\n      │client, CLI, Crons, test suite, etc)│\n      └────────────────────────────────────┘\n                         │                  \n                    [Protocol]\n                         │                  \n      ┌────────────────────────────────────┐\n      │              Business              │\n      └────────────────────────────────────┘\n                         │                  \n                    [Protocol]\n                         │                  \n      ┌────────────────────────────────────┐\n      │   Persistence (ORM, AJax, Stubs,   │\n      │            Mocks, etc.)            │\n      └────────────────────────────────────┘\n\nAfter that we can start experimenting by refactoring the current code and extracting possible small helpers, modules, etc. \n\nThese helpers and modules should work with the current project struct, classes, etc., but should be possible to extend it to other structures.\n\n## Assumptions\n\n- Pure JavaScript and/or small modules over full stack frameworks\n- OO, SOLID, Domain driven design and Design Patterns over \"single file application\"\n- Composition over inheritance\n- Reusable, highly decoupled, business layer over big ball of mud\n\nThat is, while there is value in the items on the right, we value the items on the left more.\n\nHighly inspired by: [Architecture the Lost Years by Robert Martin](https://www.youtube.com/watch?v=WpkDN78P884)\n\n## Other attempts\nPOC for Isomorphic JavaScript : https://github.com/Vizir/isomorphic_js\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdalssoft%2Fmodelapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdalssoft%2Fmodelapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdalssoft%2Fmodelapp/lists"}