Category: Project – AutoMapperPage 1 of 2
Here is how we organized the project: Figure 17.4: Solution Explorer view of the file organization In this project, we support request validation using FluentValidation, a third-party NuGet…
The following points are downsides that we can tame as upsides: A way to start refactoring that business logic would be to push the logic into the domain…
On the upside, we have the following: From my experience, features tend to start small and grow over time. The users often find out what they need while…
Instead of separating an application horizontally (layers), a vertical slice groups all horizontal concerns together to encapsulate a feature. Here is a diagram that illustrates that: Figure 17.1:…
In this section, we are exploring MediatR, an open-source mediator implementation.What is MediatR? Let’s start with its maker’s description from its GitHub repository, which brands it as this:…
If you need markers to inject some specific dependency in a particular class, you are most likely cheating the Inversion of Control principle. Instead, you should find a…
The CQS and CQRS patterns suggest dividing the operations of a program into commands and queries. A command mutates data, and a query fetches data. We can apply…
The test program setup is composed of the following: Once again, the names of the participants are randomly generated. The TestMessageWriter implementation is a little different and accumulates…
We cover ways to organize commands and queries in subsequent chapters. Let’s start with the JoinChatRoom feature: public class JoinChatRoom{ public record class Command(IChatRoom ChatRoom, IParticipant Requester) :…
In the previous code sample, we named the classes after the Mediator pattern actors, as shown in Figure 14.7. While this example is very similar, it uses domain-specific…