Interested in a private company training? Request it here.
The S.O.L.I.D principles were introduced by Robert C. Martin (also known as Uncle Bob) in 2000. The intention behind these principles is to make software designs more understandable, easier to maintain, and easier to extend. These principles are essential for every developer to know because they assist in writing better code and in better understanding code that was written with these principles in mind.
One might not believe it, but design patterns did not originate in software architecture. Instead, patterns were first described in the 1970s by a real 'bricks and mortar' architect. A pattern is defined as a reusable solution to a common problem, without dictating the exact implementation. This characteristic makes patterns an ideal learning tool and a powerful means for communicating design ideas. Of course, there are also anti-patterns—approaches that are frequently used but are better avoided.
When developing software, you often find yourself continuously creating new objects. While the fundamental act of creating new objects is not inherently problematic, it can lead to design challenges or increased complexity. Creational patterns can assist you in managing object creation in a way that is appropriate for the situation.
Once your objects are created, they begin to interact. Without careful design, these interactions can quickly lead to tightly coupled code. Behavioral design patterns assist in identifying common communication patterns between objects and in implementing these patterns effectively. By applying these patterns correctly, you can enhance the flexibility of interactions between objects.
Created objects do not tend to stand on their own. No, they start encapsulating other objects trying to create structure in, what otherwise would be a chaotic software environment. Structural patterns help at identifying and setting up relationships between objects.
Programming languages themselves are built upon a variety of patterns in their implementation. In this chapter, you will construct your own compact programming language that, incidentally, is designed to be extensible. Throughout this process, you will uncover and apply several important patterns that are not only crucial in the realm of programming language development but are also perfectly applicable beyond this scope!
Source Generators revolutionize the way we approach coding in C# by automating the creation of routine code directly within the C# compiler. This innovation not only circumvents the inefficiencies of reflection but also lays the groundwork for efficient Ahead-Of-Time (AOT) compilation, significantly optimizing performance.
Most developers are not naturally skilled as graphic designers. This recognition has led to the development of design patterns that enable developers to concentrate on coding the application's behavior while allowing graphic designers to create compelling user interfaces. The cornerstone among these patterns is known as Model-View-Whatever (MVW), with Whatever being adaptable based on the specific technology in use. Grasping the MVW pattern is crucial, as it forms the foundation for developing both Windows and web applications.
Have you ever encountered Reactive Programming? This significant advancement teaches you to harness Observables for programming. Through this approach, you'll learn to address common challenges that traditional Object-Oriented Programming finds difficult to solve. Additionally, we will delve into the Fluxor/Redux pattern, further expanding our toolkit for managing complex application states.
When do you most need patterns? The answer is particularly when you're developing a framework on your own. Building a framework involves integrating new features while maintaining backward compatibility, a challenge that can be significantly simplified through the proper application of patterns. Therefore, in this final part of the training, we will construct a reusable library. During this process, we will encounter several challenges and address them by applying the appropriate patterns.
So, how can you become a better developer? One of the best ways is to learn about design patterns. Design Patterns provide reusable solutions for common software design challenges. In this training, we identify software design problems and explore how to address them using the most suitable Design Pattern. All examples and labs use the latest LTS version of .NET and Visual Studio. Labs also work with any recent .NET and VS version.
This course is intended for experienced programmers who are familiar with C# and have a working experience of .NET.