
Explore SOLID software architecture with coding examples in C Sharp. Apply Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, Interface Aggregation Principle, and Dependency Inversion Principle to design maintainable systems.
Apply the single responsibility principle to ensure a class handles one function, improving cohesion and reducing change by separating reporting, user management, and access control.
Refactor a user registration flow in c# by splitting validation and email tasks into dedicated classes, illustrating the single responsibility principle, and exploring dependency injection and testability.
Explore the open closed principle, keeping software open for extension but closed for modification, and learn to extend behavior via polymorphism, inheritance, and interfaces; boosts robustness and reduces change risk.
Explore applying the open closed principle with interfaces or inheritance to compute areas for rectangles and circles without modifying the calculator when adding new shapes.
Explore Liskov substitution principle, showing how a base class can be replaced by its subtypes without altering correctness or behavior, while honoring preconditions, postconditions, invariants, and covariance of return types.
This lecture demonstrates a coding example of the Liskov substitution principle, showing how overriding setters in a square breaks the base class contract and alters area when replacing a rectangle.
Apply interface segregation principle by splitting large interfaces into smaller, client-specific ones; show a violation with a product interface for trousers and hats, then refactor into maintainable interfaces.
Explore how violating interface segregation by forcing unrelated properties into a message interface leads to rigid code, then refactor to ensure clients depend only on needed methods.
Explore the dependency inversion principle, where abstractions should not depend on details. High level modules use interfaces or contracts instead of concrete implementations, with a forthcoming C# example.
Implement the dependency inversion principle by introducing an abstraction layer between the game server and the file logger, replacing direct references with a logger interface to reduce coupling and improve maintainability.
In this course you will learn in detail the SOLID software architecture design principles for Object Oriented Programming. You will learn what are the benefits (and sometimes drawbacks !) of each of the SOLID principles which are:
We will explore each principle in detail and will then go through code examples that violate the principle and refactor these together in video tutorials. The code files of both the initial code and the refactored version are provided for each coding example. In this way, after following this course you will not only be able to apply this knowledge to your own code and develop software architecture of higher quality, but you will also be able to detect existing violations and correct them.
The coding examples are in C# , a widely used object oriented programming language. However, if you are not familiar with C# but use another object oriented programming language (e.g. Java, PHP, Python etc. ) don't worry you'll still be able to fully grasp the different principles and the scope of each refactoring. Additionally, if you'd like me to go through a similar code example in another programming language, just sent me a message and I'll be glad to guide you through one.
I'm also available to answer any queries you may have regarding any course material which you didn't understand or would like further detail on.
Some of the many positive reviews I have received so far :
"The course is comprehensive and well explained through clear and concise examples, and shows that the instructor is highly experienced in their field. Overall this course is excellent and highly appropriate for software developers looking to improve their architectural and programming skills, both beginners as well as more advanced programmers. I will be looking forward to more courses by the author in the future." - J. Fusselberg
"High quality videos, lectures are clear and to the point. This course is highly recommended for any developer who wants to move on to a senior position or software architect role. However, it will also be a good start for beginner to introduce them to proper coding practices early on." - Roberto de Souza
I look forward to seeing you in my course and hearing how the content's helping you in your work or studies !