Learn to write testable, flexible, maintainable code. Have you ever felt like your code gets worse over time, not better? This guide teaches professional software developers basic software design and architecture techniques that you weren't taught in school.
What will you learn?
Everyone loves writing clean code, but learning to write the code that people love to work with is not easy. In this chapter, you will learn how to write brain-friendly code using human-centered design principles. We'll also look at coding conventions that professional developers use in their day-to-day work, such as writing helpful comments, organizing and naming, testing, refactoring, error handling, and more.
Object Oriented Programming and Domain Modeling
Have you ever wondered where to place your business logic? In this chapter, we will learn how to use OOP correctly to work with applications of any complexity. We are redefining and re-learning object-oriented programming; this time with the sole purpose of using it to create rich domain models that write and encapsulate complex business rules, separating them from frameworks, dependencies, tools, and ORMs like Express.js and Sequelize.
Design principles are like fences for well-written code. They help you identify what makes your code great, as well as what makes your code not so great ... Prevent unsatisfactory code by learning to apply basic software design principles. You will be able to identify bad design and apply patterns to refactor for the better.
Do you notice that you are changing functions in one part of the application only to break the function in another?
To accommodate change, prevent costly refactorings, and keep our code modular, testable, and flexible, we learn to use Conway's Law to define boundaries, enforce them, and package them as well-defined components.
How to Build a Real Application with Domain-Driven Design
Sometimes CRUD and Model-View-Controller just aren't enough. Domain-Driven Design is a software development approach that helps you transform complex problem areas into rich, expressive, and evolving software.
You will learn about the basic ideas behind Domain Driven Design, how companies scale codebases from monoliths to microservices, and how to design and develop a real Forum application developed using DDD.