Command Query Responsibility Segregation (CQRS) applies the Command Query Separation (CQS) principle. Compared to what we saw in Chapter 14, Mediator and CQRS Design Patterns, we can push CQRS further using microservices or serverless computing. Instead of simply creating a clear separation between commands and queries, we can divide them even more using multiple microservices and data sources.CQS is a principle stating that a method should either return data or mutate data, but not both. On the other hand, CQRS suggests using one model to read the data and one model to mutate the data.Serverless computing is a cloud execution…
-
-
In this section, we learned about using the Backend for Frontend (BFF) design pattern to front a micro e-commerce web application. We discussed layering APIs and the advantages and disadvantages of a two-layer design. We autogenerated strongly typed HTTP clients using Refit, managed a shopping cart, and fetched the catalog from the BFF. We learned how to use a BFF to reduce complexity by moving domain logic from the frontend to the backend by implementing multiple Gateway patterns.Here are a few benefits that we explored: Despite these benefits, using a BFF may also increase complexity and introduce potential performance overhead.…
-
Now that we set up HTTPS, we can build the container using the following commands: docker compose build We can execute the following command to start the containers: docker compose up This should start the containers and feed you an aggregated log with a color per service. The beginning of the log trail should look like this: [+] Running 3/0 ✔ Container c19-repr.products-1 Created 0.0s ✔ Container c19-repr.baskets-1 Created 0.0s ✔ Container c19-repr.bff-1 Created 0.0sAttaching to c19-repr.baskets-1, c19-repr.bff-1, c19-repr.products-1c19-repr.baskets-1 | info: Microsoft.Hosting.Lifetime[14]c19-repr.baskets-1 | Now listening on: http://[::]:80c19-repr.baskets-1 | info: Microsoft.Hosting.Lifetime[14]c19-repr.baskets-1 | Now listening on: https://[::]:443… To stop the services, press Ctrl+C. When you…
-
Let’s start by exploring the deployment topology. First, we split the Chapter 18 REPR project into two services: Baskets and Products. Then, we add a BFF API that fronts the two services to simplify using the system. We do not have a UI per se, but one http file per project exists to simulate HTTP requests. Here’s a diagram that represents the relationship between the different services: Figure 19.25: a diagram that represents the deployment topology and relationship between the different services The easiest and most extendable way to start the projects is to use Docker, but it is optional;…
-
This project leverages the Backend for Frontend (BFF) design pattern to reduce the complexity of using the low-level API of the REPR project we created in Chapter 18. The BFF endpoints act as several types of gateway we explore.This design makes two layers of API, so let’s start here. Layering APIs From a high-level architecture perspective, we can leverage multiple layers of APIs to group different levels of operation granularity. For example, in this case, we have two layers: Here’s a diagram that represents this concept (high-level APIs are BFFs in this case, but the design could be nuanced): Figure…