
Software architecture defines the set of rules that limit converting thoughts from a developer's mind into code. It keeps ideas from wandering and ensures code follows stable patterns.
A good software architecture guides development to reduce complexity as the product grows, producing simple, maintainable software rather than a chaotic, hard-to-work-on project.
Explore how software architecture helps manage complexity by making code easier to understand. Define complexity as the structure that hinders understanding or change, and show how architecture reduces it.
Explore the separation of concerns principle by dividing related concerns into modular components. This boosts efficiency and lets specialists in marketing, accounting, and more focus on what they do best.
Demonstrate separation of concern and software architectures using a cargo shipping app that searches trips, shows port routes, and flags delays when actual hours exceed standard by 10%.
Explore how a Windows Forms example shows the absence of separation of concerns by mixing data access, business logic, and UI in one form.
Apply a three-layer architecture to separate UI, business logic, and data access, using a service layer, repository layer, and domain layer to support a display view model.
Explore dependency injection and inversion of control to decouple service and repository layers by using abstractions and wiring dependencies with the Microsoft extensions dependency injection package.
Examine how a data-centric layered architecture creates a disconnect between business intent and code, highlighting maintenance challenges as the UI, service, repository, and domain dependencies flow one way.
Identify how data-centric layered architectures cause business logic to leak into the repository or UI, including stored procedures, and risks when switching technologies or data stores due to weak intent.
Analyze a data-centric, technology-driven architecture and apply separation of concerns by organizing modules around technologies, using a horizontally sliced, multi-layer layout with folders, controllers, and serializers.
Explore intent driven architecture through a car rental app, examining the screaming architecture’s vertical slices and the resulting complexity. Seek a middle ground that exposes business intent without overkill.
Explore the middle ground between technology-driven and intent-based architectures by proposing a structure that balances both technologies and intent.
Explore onion architecture, a type of clean, layered architecture that keeps core business and use cases independent from UI and database, with dependencies flowing inward.
Explore how the database can be implemented as a plugin that plugs into the use case layer through an abstraction, enabling plugin-based development within clean architecture and onion architecture.
Apply clean architecture to a cargo shipping app by centering the core business and use case layers in an onion, with inward dependencies and dependency injection for repository plugins.
Clean architecture clarifies intent by organizing use cases by screen or feature, and keeps business logic from leaking into the UI by isolating core logic in a dedicated middle tier.
Keep all business logic in the use cases and core layer, self-contained and framework independent, enabling use with Blazor, Angular, React, or Vue.js.
Implement the view ports use case in clean architecture, expose ports via a port repository, and wire it to the UI to filter trips by a selected port.
Implement the search by port use case in a clean architecture, inject the trip segment repository, and map results to trip segment view models.
Identify the common architecture mistake of coupling business logic to framework design patterns, such as Windows Forms and MVC controllers, and learn to move logic into plane classes.
Software development career is very rewarding. Being able to code with simple, efficient and clean architecture will not only help you crack your interviews, but also take your career to a whole new level.
Software development jobs are mainly in developing business applications. This is the focus of this course. In this course, I will dive deep into the typical layered architecture for business applications, analyze the pros and cons of it and then present you the Clean Architecture, also known as the onion architecture, which is covered in Robert Martin's books and blogs.
This course is not just full of theories, I prepared a cargo shipping application as a whole case study with a lot of existing code analysis to help you understand the related software design principles, applying layered architecture and the clean architecture. I also code in front of your eyes when I apply the Clean Architecture to implement two new use cases.
By the end of the course, you will have a thorough understanding of the Separation of Concerns principle, layered architecture as well as the Clean Architecture and be able to use them in your next projects.
What you will learn:
Basic Software Architecture Concepts
Layered Architecture
Clean Architecture (Onion Architecture)
Separation of Concerns Principle
How Clean Architecture helps TDD and Unit Testing
Common Mistakes in Software Architecture
What you will need:
You have programmed for more than 6 months with any OOP languages
You have basic knowledge of OOP
You are eager to learn software architecture
Who this course is for:
Anyone with any OOP computer languages knowledge who wants to know more about software architecture in business apps.
Anyone who want to learn about the Clean Architecture (Onion Architecture) but haven't been able to grasp it yet.
Last but not least:
Enjoy this course and don't forget to check out my other courses which are created with the Clean Architecture in them to help you further understand this great architecture.