{"id":23470933,"url":"https://github.com/benjitrapp/solid-coding-dojo","last_synced_at":"2026-03-20T01:30:31.482Z","repository":{"id":111601913,"uuid":"101472074","full_name":"BenjiTrapp/SOLID-Coding-Dojo","owner":"BenjiTrapp","description":null,"archived":false,"fork":false,"pushed_at":"2019-06-24T09:42:37.000Z","size":91,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-08T21:03:25.933Z","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/BenjiTrapp.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}},"created_at":"2017-08-26T08:02:18.000Z","updated_at":"2022-06-08T09:45:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"a2f358f8-0c2c-4aee-8544-260d73c38a0d","html_url":"https://github.com/BenjiTrapp/SOLID-Coding-Dojo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BenjiTrapp/SOLID-Coding-Dojo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjiTrapp%2FSOLID-Coding-Dojo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjiTrapp%2FSOLID-Coding-Dojo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjiTrapp%2FSOLID-Coding-Dojo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjiTrapp%2FSOLID-Coding-Dojo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BenjiTrapp","download_url":"https://codeload.github.com/BenjiTrapp/SOLID-Coding-Dojo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjiTrapp%2FSOLID-Coding-Dojo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29054667,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T15:43:47.601Z","status":"ssl_error","status_checked_at":"2026-02-03T15:43:46.709Z","response_time":96,"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":[],"created_at":"2024-12-24T16:18:08.259Z","updated_at":"2026-02-03T19:31:19.805Z","avatar_url":"https://github.com/BenjiTrapp.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://team-coder.com/wp-content/uploads/SOLID.png)\n\nThis repository contains examples of the five SOLID design principles of object-oriented programming. The examples are \nwritten in Java/Groovy. Each example has a \"good\" and a \"bad\" example to demonstrate adherence to and violation of the \nprinciple, respectively. To not spoiler yourself please start with the bad example and improve it on your own. \nAt the end you still can compare your solution with the good example :-) \n\n### What is SOLID? \n* **S**ingle responsibility principle: A class should have only a single responsibility (i.e. changes to only one part \n                                       of the software's specification should be able to affect the specification of \n                                       the class)\n* **O**pen/closed principle:``software entities … should be open for extension, but closed for modification.``\n* **L**iskov substitution principle: ``objects in a program should be replaceable with instances of their subtypes \n                                       without altering the correctness of that program.`` \n                                       ==\u003e Also known as design by contract.\n* **I**nterface segregation principle: ``many client-specific interfaces are better than one general-purpose interface.``\n* **D**ependency inversion principle:\n\n### How can I start learning SOLID?\n\n1. Clone this repository and check out the master branch\n1. Run ``./gradlew startLesson`` or click on the Task when you use an IDE like Intellij\n1. Read the .md-file in the directory src/ carefully and start implementing.\n1. Curious about a \"good\" solution? Run the task ``./gradlew getSolution`` \n\n### Best practice\n\nEach lesson and example comes with at least one Spock-test. Feel free to implement your own tests in what ever language or framework you feel well with. To have a better experience and learning effect, try to implement your solution by using (A)TDD and stick to `implement the test first`. \n\n\n![](http://lesseverything.com/images/blog/easybaby.jpg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenjitrapp%2Fsolid-coding-dojo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenjitrapp%2Fsolid-coding-dojo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenjitrapp%2Fsolid-coding-dojo/lists"}