{"version":1,"pages":[{"id":"QgztRiFSM5XgyRjHhZ9n","title":"Introduction","pathname":"/clean-code","siteSpaceId":"sitesp_pEpog","description":"Clean Code - A Handbook of Agile Software Craftsmanship by Robert C. Martin (Uncle Bob)","breadcrumbs":[{"label":"Overview"}]},{"id":"M2cs5YAwamoXJ4smn5Sz","title":"Why is clean code so important?","pathname":"/clean-code/overview/why-is-clean-code-so-important","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Overview"}]},{"id":"HT9Z3sL25FV0dszXxqOS","title":"What Is Clean Code?","pathname":"/clean-code/overview/what-is-clean-code","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Overview"}]},{"id":"54OVcpcZKRQyKRkzB1rY","title":"How to write clean code?","pathname":"/clean-code/overview/how-to-write-clean-code","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Overview"}]},{"id":"4T2419xZpuARendALfLO","title":"Conventions","pathname":"/clean-code/overview/conventions","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Overview"}]},{"id":"8QV0yRTfIwnHEMh3djn4","title":"Meaningful Names","pathname":"/clean-code/the-key-principles-of-clean-code/meaningful-names","siteSpaceId":"sitesp_pEpog","description":"Names are everywhere in software. We name our variables, our functions, our arguments, classes,  packages, source files, directories, ... What follows are some simple rules for creating good names.","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"OIMyDr37HFs2rnuzYsWm","title":"Functions","pathname":"/clean-code/the-key-principles-of-clean-code/functions","siteSpaceId":"sitesp_pEpog","description":"Functions should be small and do one thing.","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"HiaO8Gd8rlR2mIagtXa9","title":"Classes","pathname":"/clean-code/the-key-principles-of-clean-code/classes","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"SYQ0Rrx56tT2AsaHKDpR","title":"Comments","pathname":"/clean-code/the-key-principles-of-clean-code/comments","siteSpaceId":"sitesp_pEpog","description":"Always try to explain yourself in code.","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"sTVN1lz8ssKVZKfhfdLd","title":"Error Handling","pathname":"/clean-code/the-key-principles-of-clean-code/error-handling","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"rQeprWTCYCgRvcCgeGes","title":"Exception handling best practices","pathname":"/clean-code/the-key-principles-of-clean-code/error-handling/exception-handling-best-practices","siteSpaceId":"sitesp_pEpog","description":"These Java Exception handling best practices provide software developers guidance when they develop new applications.","breadcrumbs":[{"label":"The key principles of clean code"},{"label":"Error Handling"}]},{"id":"BoEIsWkXKsKz3rmXlfGC","title":"Unit Tests","pathname":"/clean-code/the-key-principles-of-clean-code/unit-tests","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"hG8UwCC3z2c71vzfPlgY","title":"Formatting","pathname":"/clean-code/the-key-principles-of-clean-code/formatting","siteSpaceId":"sitesp_pEpog","description":"Code formatting is important.","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"Grvfr4PbzqvEy2C9zfGd","title":"Objects and Data Structures","pathname":"/clean-code/the-key-principles-of-clean-code/objects-and-data-structures","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"GfJjtg1LLc5j8PDnFjgW","title":"Simple Design Rules","pathname":"/clean-code/the-key-principles-of-clean-code/simple-design-rules","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"pegS06rhgQOJVY6HLjq9","title":"Concurrency","pathname":"/clean-code/the-key-principles-of-clean-code/concurrency","siteSpaceId":"sitesp_pEpog","description":"Objects are abstractions of processing. Threads are abstractions of schedule.","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"5vWBC5KWyop2EGfiXIYJ","title":"Code Smells","pathname":"/clean-code/the-key-principles-of-clean-code/code-smells","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"The key principles of clean code"}]},{"id":"nZL4hsprC20ynj2226VC","title":"Write Short Units of Code","pathname":"/clean-code/building-maintainable-software/write-short-units-of-code","siteSpaceId":"sitesp_pEpog","description":"Limit the length of code units to 15 lines of code. Do this by not writing units that are longer than 15 lines of code in the first place, or by splitting long units into multiple smaller units.","breadcrumbs":[{"label":"Building Maintainable Software"}]},{"id":"HpN7F8zfIROFC0HJbDAe","title":"Write Simple Units of Code","pathname":"/clean-code/building-maintainable-software/write-simple-units-of-code","siteSpaceId":"sitesp_pEpog","description":"Limit the number of branch points per unit to 4. Do this by splitting complex units into simpler ones and avoiding complex units altogether.","breadcrumbs":[{"label":"Building Maintainable Software"}]},{"id":"ttaeLqomsVkOSCkLBQlW","title":"Write Code Once","pathname":"/clean-code/building-maintainable-software/write-code-once","siteSpaceId":"sitesp_pEpog","description":"Do not copy code. Do this by writing reusable, generic code and/or calling existing methods instead.","breadcrumbs":[{"label":"Building Maintainable Software"}]},{"id":"sJCU8YjxySQejhphm8Dj","title":"Keep Unit Interfaces Small","pathname":"/clean-code/building-maintainable-software/keep-unit-interfaces-small","siteSpaceId":"sitesp_pEpog","description":"Limit the number of parameters per unit to at most 4. Do this by extracting parameters into objects.","breadcrumbs":[{"label":"Building Maintainable Software"}]},{"id":"06D1eqp4OZeE4F2hk5Fw","title":"Write Clean Code","pathname":"/clean-code/building-maintainable-software/write-clean-code","siteSpaceId":"sitesp_pEpog","description":"Writing clean code is what you must do in order to call yourself a professional.","breadcrumbs":[{"label":"Building Maintainable Software"}]},{"id":"6XdfQjAFqz3dbA12L2Us","title":"Automate Tests","pathname":"/clean-code/building-maintainable-software/automate-tests","siteSpaceId":"sitesp_pEpog","description":"Automate tests for your codebase. Do this by writing automated tests using a test framework. This improves maintainability because automated testing makes development predictable and less risky.","breadcrumbs":[{"label":"Building Maintainable Software"}]},{"id":"fxCQ9MMt1sSXNqNvKO5Y","title":"SOLID Principle","pathname":"/clean-code/bonus/solid-principle","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Bonus"}]},{"id":"HWkvFJXm8ssVpkXvIM9c","title":"SRP - Single Responsibility Principle","pathname":"/clean-code/bonus/solid-principle/srp-single-responsibility-principle","siteSpaceId":"sitesp_pEpog","description":"A class should have one and only one reason to change, meaning that a class should have only one job.","breadcrumbs":[{"label":"Bonus"},{"label":"SOLID Principle"}]},{"id":"DIcfQ9NaNqQhimJUO5NL","title":"OCP - Open-Closed Principle","pathname":"/clean-code/bonus/solid-principle/ocp-open-closed-principle","siteSpaceId":"sitesp_pEpog","description":"Objects or entities should be open for extension, but closed for modification.","breadcrumbs":[{"label":"Bonus"},{"label":"SOLID Principle"}]},{"id":"Gq6tFoGrtB3whBtCbrBZ","title":"LSP - Liskov Substitution Principle","pathname":"/clean-code/bonus/solid-principle/lsp-liskov-substitution-principle","siteSpaceId":"sitesp_pEpog","description":"Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.","breadcrumbs":[{"label":"Bonus"},{"label":"SOLID Principle"}]},{"id":"C3wmSXSGNGuFnfSRJODh","title":"ISP - Interface Segregation Principle","pathname":"/clean-code/bonus/solid-principle/isp-interface-segregation-principle","siteSpaceId":"sitesp_pEpog","description":"Many client-specific interfaces are better than one general-purpose interface.","breadcrumbs":[{"label":"Bonus"},{"label":"SOLID Principle"}]},{"id":"aGxT7ArQkrHVZYP4ZZBL","title":"DIP - Dependency Inversion Principle","pathname":"/clean-code/bonus/solid-principle/dip-dependency-inversion-principle","siteSpaceId":"sitesp_pEpog","description":"High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.","breadcrumbs":[{"label":"Bonus"},{"label":"SOLID Principle"}]},{"id":"EmGf5BatSiADyQqxylMn","title":"LoD Principle","pathname":"/clean-code/bonus/lod-principle","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Bonus"}]},{"id":"h4cvlMbATgwhyArlSa9x","title":"YAGNI Principle","pathname":"/clean-code/bonus/yagni-principle","siteSpaceId":"sitesp_pEpog","description":"You aren't gonna need it","breadcrumbs":[{"label":"Bonus"}]},{"id":"Pk0S5CTENGpO6uvAf6je","title":"DRY Principle","pathname":"/clean-code/bonus/dry-principle","siteSpaceId":"sitesp_pEpog","description":"Don't Repeat Yourself Principle","breadcrumbs":[{"label":"Bonus"}]},{"id":"UiE8ly1X6XCYki3gwlTP","title":"Fail Fast principle","pathname":"/clean-code/bonus/fail-fast-principle","siteSpaceId":"sitesp_pEpog","description":"When a problem occurs, it fails immediately and visibly.","breadcrumbs":[{"label":"Bonus"}]},{"id":"cT7LvCS2MW87WBXuG1JB","title":"Hollywood Principle","pathname":"/clean-code/bonus/hollywood-principle","siteSpaceId":"sitesp_pEpog","description":"Don't Call Us, We'll Call You.","breadcrumbs":[{"label":"Bonus"}]},{"id":"3HGeEvqcc8BWWwQN4aBw","title":"Library vs Framework","pathname":"/clean-code/bonus/library-vs-framework","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Bonus"}]},{"id":"79nVX7l11gbvx6GmrEAa","title":"Coupling and Cohesion","pathname":"/clean-code/bonus/coupling-and-cohesion","siteSpaceId":"sitesp_pEpog","description":"The primary OO goals are loose coupling and high cohesion. The key to creating maintainable code is adhering to loose coupling, high cohesion.","breadcrumbs":[{"label":"Bonus"}]},{"id":"SHiEPHrO8WvOEBf7jP3s","title":"AOP - Aspect-Oriented Programming","pathname":"/clean-code/bonus/aop-aspect-oriented-programming","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Bonus"}]},{"id":"isNe4jR5AbwGbeDuE71o","title":"Building an AOP framework","pathname":"/clean-code/bonus/aop-aspect-oriented-programming/building-an-aop-framework","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Bonus"},{"label":"AOP - Aspect-Oriented Programming"}]},{"id":"rf7VH0BPNmZkr1UpT16r","title":"OOP Design Pattern","pathname":"/clean-code/bonus/oop-design-pattern","siteSpaceId":"sitesp_pEpog","description":"","breadcrumbs":[{"label":"Bonus"}]},{"id":"0oPKNaVQR0VU6iXQbDl5","title":"Technical Dept","pathname":"/clean-code/bonus/technical-dept","siteSpaceId":"sitesp_pEpog","description":"Technical debt management requires a balance between quality and speed. Technical debt needs to be understood, used and managed from a long-term perspective.","breadcrumbs":[{"label":"Bonus"}]},{"id":"6BSgvPh8Nfzlwjuy7w1u","title":"How to learn software Design and Architecture - Roadmap","pathname":"/clean-code/bonus/how-to-learn-software-design-and-architecture-roadmap","siteSpaceId":"sitesp_pEpog","description":"The Full-stack Software Design & Architecture Map","breadcrumbs":[{"label":"Bonus"}]},{"id":"wCdEokz87HzeOtVnxRKD","title":"Microservcies","pathname":"/clean-code/bonus/microservcies","siteSpaceId":"sitesp_pEpog","breadcrumbs":[{"label":"Bonus"}]},{"id":"6DxThKpkJwHGBiql1WeF","title":"Defining the scope of a microservice","pathname":"/clean-code/bonus/microservcies/defining-the-scope-of-a-microservice","siteSpaceId":"sitesp_pEpog","breadcrumbs":[{"label":"Bonus"},{"label":"Microservcies"}]},{"id":"YewcDyP7SsersBrBKRxI","title":"Step-by-Step: How to Identify Over-Scoped Microservices","pathname":"/clean-code/bonus/microservcies/step-by-step-how-to-identify-over-scoped-microservices","siteSpaceId":"sitesp_pEpog","breadcrumbs":[{"label":"Bonus"},{"label":"Microservcies"}]},{"id":"meMk2pfiKqalDJXsJ6Ck","title":"Benefits of Grouping or Consolidating Microservices","pathname":"/clean-code/bonus/microservcies/benefits-of-grouping-or-consolidating-microservices","siteSpaceId":"sitesp_pEpog","breadcrumbs":[{"label":"Bonus"},{"label":"Microservcies"}]},{"id":"L3qQBcmMHUTndEJMLazR","title":"A practical step-by-step plan to consolidate microservice","pathname":"/clean-code/bonus/microservcies/a-practical-step-by-step-plan-to-consolidate-microservice","siteSpaceId":"sitesp_pEpog","breadcrumbs":[{"label":"Bonus"},{"label":"Microservcies"}]}]}