Giter Club home page Giter Club logo

evolutionary-architecture / evolutionary-architecture-by-example Goto Github PK

View Code? Open in Web Editor NEW
1.1K 22.0 125.0 2.95 MB

Navigate the complex landscape of .NET software architecture with our step-by-step, story-like guide. Unpack the interplay between modular monoliths, microservices, domain-driven design, and various architectural patterns. Go beyond the one-size-fits-all solutions and understand how to blend these approaches based on your unique needs.

License: MIT License

Dockerfile 0.78% C# 99.22%
architecture clean-code ddd microservices domain-driven-design architecture-components architecture-decision-records architecture-guidelines clean-architecture ddd-architecture

evolutionary-architecture-by-example's People

Contributors

anddrzejb avatar dependabot[bot] avatar kamilbaczek avatar mateuszpietrusinski avatar meaboutsoftware avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

evolutionary-architecture-by-example's Issues

Simplify Module Activation Process

Is your feature request related to a problem? Please describe.
The current implementation for enabling modules relies on feature flags, which adds complexity to the system.

Describe the solution you'd like
I would like to simplify the process by directly reading module enablement from the configuration.

Describe alternatives you've considered
One alternative is to continue using feature flags for module enablement, but this may add unnecessary complexity. Another alternative could be to explore different methods of module activation.

Additional context
No additional context at this time.

Create solution template for evolutionary architecture

Is your feature request related to a problem? Please describe.
Some people want to start theirs projects using evolutionary architecture example.
This is not developer friendly.

Describe the solution you'd like
Create a solution template for evolutionary architecture.

Add additional links to chapters in main readme

Is your feature request related to a problem? Please describe.
At main readme there is no links to chapters where chapters are described.

Describe the solution you'd like
Add missing links to enhance navigation

Adoption of .NET 8 Native IDateTimeProvider Support in Place of ISystemClock

Is your feature request related to a problem? Please describe.
The current implementation relies on ISystemClock for managing time-related operations. However, with the introduction of native time support in .NET 8, there's an opportunity to enhance the system by utilizing the new native time capabilities.

Describe the solution you'd like
Update the codebase to replace the usage of ISystemClock with the native time support introduced in .NET 8. This will involve refactoring the relevant sections of the code to leverage the new time functionalities provided by the .NET 8 framework.

Describe alternatives you've considered
An alternative could be to continue using ISystemClock, but considering that .NET 8 provides native time support, it makes sense to migrate to the native solution for improved performance and consistency across the codebase.

Additional context
The adoption of native time in .NET 8 can bring alignment with the latest advancements in the .NET framework. It's essential to test and validate the changes thoroughly to ensure compatibility and reliability across different scenarios.

Example how to do observability?

Is your feature request related to a problem? Please describe.
It is frequent question How to implement observability? It is mentioned that observability is important from start of project. How to Do it?

My proposition is add this part as example

SignContract.Events.ContractSignedEvent Event Handler Exception

Describe the bug

There is an exception during using the app

System.Collections.Generic.IEnumerable1[MediatR.INotificationHandler1[EvolutionaryArchitecture.Fitnet.Contracts.SignContract.Events.ContractSignedEvent]]' from root provider because it requires scoped service 'EvolutionaryArchitecture.Fitnet.Passes.Data.Database.PassesPersistence

Ice panel documentation

Is your feature request related to a problem? Please describe.

For chapter 1 and 2 component architecture looks similar only implementation details were changed but for chapter 3. Deployment and components were changed.

Describe the solution you'd like

Chapter 3 should have ice panel diagrams and linked

Discuss about using Dapr in Chapter 3 to not slow down development during transition from monolith to Microservices

Is your feature request addressing a specific issue? Please elaborate.

Some individuals have suggested that the next stage of evolution could involve the incorporation of Dapr. This would enable us to maintain our focus on the business aspects rather than getting entangled in Microservices infrastructure management.

Please provide further details on the proposed solution.

I would like to initiate a discussion on this matter.

Add information about how infrastructure can evolve

Is your feature request related to a problem? Please describe.
At the moment we focus mainly on solution architecture. It would be great to include description about infrastructure and how it can grow.

Describe the solution you'd like
Each chapter should contain a section that shows possible infrastructure solutions.

Describe alternatives you've considered
No alternatives considered.

Additional context
No additional context.

Outbox pattern implementation

Is your feature request addressing a specific issue? Please elaborate.

In Chapter 3 of our project, we have introduced asynchronous communication through an external message broker, which is a critical component of our system. However, the absence of the Outbox Pattern in this chapter could potentially lead to data inconsistency and reliability issues when dealing with asynchronous messaging.

Please provide further details on the proposed solution.

It has been suggested to incorporate the outbox pattern in Chapter 3.

Add information about how tests can evolve

Is your feature request related to a problem? Please describe.
At the moment we focus mainly on solution architecture. It would be great to include description about testing strategy and how it can grow.

Describe the solution you'd like
Each chapter should contain a section that shows possible testing strategies.

Describe alternatives you've considered
No alternatives considered.

Additional context
No additional context.

MassTransit ITestingHarness and OutBoxPattern

Issue Description:

Problem:

The MassTransit library provides the ITestingHarness interface, which allows for testing and verification of published events. However, when the OutBoxPattern is configured, the behavior of publishing events changes. Instead of immediately publishing the event, the service sends the event in the background after loading it from the database.

Manual Testing:

Manually testing the scenario has confirmed that this behavior is functioning correctly.

Test To Fix

image

Transition IEnumerable<object[]> Test Classes to TheoryData in Xunit

Is your feature request related to a problem? Please describe.
The current test classes utilize IEnumerable<object[]> for parameterized tests. Transitioning to TheoryData in Xunit can enhance code readability and maintainability.

Describe the solution you'd like
Update existing test classes that use IEnumerable<object[]> to leverage Xunit's TheoryData for parameterized testing. This transition will provide a more structured and intuitive approach to writing and maintaining test cases.

Continuous architecture evolution direction assessment - description and definition fitness functions

Our repository has become a valuable resource for people seeking to understand how architectural evolution takes place. As we move forward, it's crucial to establish a clear framework for monitoring this evolution and ensuring alignment with our project's objectives.

Documentation of Architecture Evolution:

We should document the process of architectural evolution within our repository to provide transparency and insight into our decision-making. This documentation will help contributors and stakeholders understand how our architecture evolves over time.

Introducing Fitness Functions:

To continuously assess the direction of architectural evolution, we propose the use of fitness functions. Fitness functions are tools that enable us to quantitatively evaluate the fitness or suitability of our architecture concerning specific requirements. These functions will help us measure how well our architecture aligns with our evolving needs.

Docker file for chapter 1 references dotnet 7 rather that dotnet 8

Describe the bug
Docker file for chapter 1 references dotnet 7 rather that dotnet 8

To Reproduce
Steps to reproduce the behavior:

  1. run docker-compose build in chapter 1 src directory

Expected behavior
Builds without issue.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):
-Windows 11

Smartphone (please complete the following information):

  • N/A

Additional context
N/A.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.