Skip to content
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
f5ba3fe
- checkin - initial v1.0.0
NinjaRocks Nov 23, 2025
929b055
- Checkin v1.0.0 working code
NinjaRocks Nov 23, 2025
203e2d1
- update read me
NinjaRocks Nov 23, 2025
0eb432b
Update README.md
NinjaRocks Nov 23, 2025
bb1bb4c
Refactor Aggregate and Saga descriptions in README
NinjaRocks Nov 23, 2025
8a919e2
Update README.md
NinjaRocks Nov 23, 2025
6ef0065
- update Architecture.png
NinjaRocks Nov 23, 2025
0b072dc
Adjust image size in README.md
NinjaRocks Nov 23, 2025
f505dd3
Update README.md
NinjaRocks Nov 23, 2025
712d6f1
- Fixed stores abstraction and views
NinjaRocks Nov 24, 2025
0b9f474
- Implement SourceFlow.Net.SQL for stores.
NinjaRocks Nov 24, 2025
03c298b
Update README with architecture details
NinjaRocks Nov 24, 2025
028cbf8
Add NuGet Packages section to README
NinjaRocks Nov 24, 2025
0e2e16e
Fix typos in README.md for package descriptions
NinjaRocks Nov 24, 2025
da85203
Add SourceFlow.Cloud.Azure details to README
NinjaRocks Nov 24, 2025
d7715e9
Add NuGet version badges for SourceFlow packages
NinjaRocks Nov 24, 2025
3598f08
Update .NET version badges and add .NET 10 support
NinjaRocks Nov 25, 2025
31ff1d7
Fix table header formatting in README.md
NinjaRocks Nov 25, 2025
0d0cffc
Revise NuGet package information in README
Nshai Nov 25, 2025
eb1f788
- Add EF Stores.
NinjaRocks Nov 25, 2025
e0691af
- Add enhancements
NinjaRocks Nov 26, 2025
ff75cb3
- add multiple dispatchers
NinjaRocks Nov 26, 2025
c27de76
Adjust image size in architecture section
NinjaRocks Nov 26, 2025
d2e5d3c
Update terminology for projections and stores in wiki
NinjaRocks Nov 26, 2025
fecdf95
Fix grammar in wiki.md regarding Views
NinjaRocks Nov 26, 2025
69405c1
- Move files to docs folder
NinjaRocks Nov 26, 2025
2769034
Add Stores.EntityFramework documentation
NinjaRocks Nov 26, 2025
20e717a
- Add Complete Architecture.
NinjaRocks Nov 26, 2025
d303ea6
Update README with versioning and new components
NinjaRocks Nov 26, 2025
b011e36
Revise README for clarity on architecture concepts
NinjaRocks Nov 26, 2025
f14b2bc
Refine terminology in README for v1.0.0 and v2.0.0
NinjaRocks Nov 26, 2025
b5a671a
- Update README.md
NinjaRocks Nov 28, 2025
d3d67e5
- Add Refactoring
NinjaRocks Nov 29, 2025
759fe8f
Update SourceFlow.Net-README.md
NinjaRocks Nov 29, 2025
b5df63c
- Fix Lint issues
NinjaRocks Nov 29, 2025
1c0c4ae
- cleaned up code
NinjaRocks Nov 29, 2025
81336c0
- fix super linter issues
NinjaRocks Nov 29, 2025
255e4e9
Fix more lint issues
NinjaRocks Nov 29, 2025
cc222ae
Refactor code to reduce duplication and improve maintainability
NinjaRocks Nov 29, 2025
02760fc
Fix null check in refactored Persist methods
NinjaRocks Nov 29, 2025
96ef664
- Fix pipeline issues
NinjaRocks Nov 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Changelog

All notable changes to SourceFlow.Net will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0] - 2025-01-28

### Added

#### Core Framework (SourceFlow.Net)
- Complete event sourcing implementation with Domain-Driven Design (DDD) principles
- CQRS pattern implementation with command/query segregation
- Aggregate pattern for managing root entities within bounded contexts
- Saga orchestration for long-running transactions and workflow management
- Event-first design with comprehensive event sourcing foundation
- Command and event publishing/subscription infrastructure
- View model projection system for read-optimized data models
- Support for multiple .NET frameworks:
- .NET 10.0
- .NET 9.0
- .NET Standard 2.1
- .NET Standard 2.0
- .NET Framework 4.6.2
- OpenTelemetry integration for observability and tracing
- Dependency injection support via Microsoft.Extensions.DependencyInjection
- Structured logging support via Microsoft.Extensions.Logging

#### Entity Framework Store Provider (SourceFlow.Stores.EntityFramework)
- `ICommandStore` implementation using Entity Framework Core
- `IEntityStore` implementation using Entity Framework Core
- `IViewModelStore` implementation using Entity Framework Core
- Configurable connection strings per store type (separate or shared databases)
- Support for .NET 10.0, .NET 9.0, and .NET 8.0
- SQL Server database provider support
- Polly-based resilience and retry policies
- OpenTelemetry instrumentation for Entity Framework Core operations

#### Architecture & Patterns
- Clean architecture principles
- Separation of concerns between read and write models
- Event-driven communication between aggregates
- State preservation and consistency guarantees
- Extensible framework design for custom implementations

### Documentation
- Comprehensive README with architecture diagrams
- Developer guide available on GitHub Wiki
- Package documentation and XML comments
- Architecture diagram showing complete system design
- Roadmap for future cloud provider support (v2.0.0)

### Infrastructure
- NuGet package generation on build
- GitHub Actions CI/CD pipeline integration
- CodeQL security analysis
- Symbol packages for debugging support
- MIT License

[1.0.0]: https://github.com/CodeShayk/SourceFlow.Net/releases/tag/v1.0.0
Binary file added Images/Architecture-Complete.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Images/Architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
231 changes: 231 additions & 0 deletions Images/Sourceflow.Net-Concept.drawio

Large diffs are not rendered by default.

382 changes: 382 additions & 0 deletions Images/Sourceflow.Net-ConceptFull.drawio

Large diffs are not rendered by default.

77 changes: 65 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
# <img src="https://github.com/CodeShayk/SourceFlow.Net/blob/master/Images/ninja-icon-16.png" alt="ninja" style="width:30px;"/> SourceFlow.Net
[![NuGet version](https://badge.fury.io/nu/SourceFlow.Net.svg)](https://badge.fury.io/nu/SourceFlow.Net)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/CodeShayk/SourceFlow.Net/blob/master/LICENSE.md)
[![GitHub Release](https://img.shields.io/github/v/release/CodeShayk/SourceFlow.Net?logo=github&sort=semver)](https://github.com/CodeShayk/SourceFlow.Net/releases/latest)
[![master-build](https://github.com/CodeShayk/SourceFlow.Net/actions/workflows/Master-Build.yml/badge.svg)](https://github.com/CodeShayk/SourceFlow.Net/actions/workflows/Master-Build.yml)
[![master-codeql](https://github.com/CodeShayk/SourceFlow.Net/actions/workflows/Master-CodeQL.yml/badge.svg)](https://github.com/CodeShayk/SourceFlow.Net/actions/workflows/Master-CodeQL.yml)
[![.Net 9.0](https://img.shields.io/badge/.Net-9.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)
[![.Net Standard 2.1](https://img.shields.io/badge/.NetStandard-2.1-blue)](https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard2.1.md)
[![.Net Standard 2.0](https://img.shields.io/badge/.NetStandard-2.0-blue)](https://github.com/dotnet/standard/blob/v2.0.0/docs/versions/netstandard2.0.md)
[![.Net Framework 4.6.2](https://img.shields.io/badge/.Net-4.6.2-blue)](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net46)

<p align="center"> </p>
<p align="center">
<strong>A modern, lightweight, and extensible .NET framework for building event-sourced applications using Domain-Driven Design (DDD) principles and Command Query Responsibility Segregation (CQRS) patterns.</strong>
Expand All @@ -24,19 +18,78 @@ SourceFlow.Net empowers developers to build scalable, maintainable applications
* ⚡ CQRS Implementation with Command/Query Segregation
* 📊 Event-First Design with Event Sourcing Foundation
* 🧱 Clean Architecture


### Core Concepts

#### v1.0.0 Architecture

**Aggregates**
- An `Aggregate` encapsulates a root domain entity within a bounded context (microservice)
- Changes to aggregates are initiated by publishing commands
- Aggregates subscribe to events to react to external changes from other sagas or workflows that may affect their state

**Sagas**
- A `Saga` represents a long-running transaction that orchestrates complex business processes
- Sagas subscribe to commands and execute the actual updates to aggregate entities
- They manage both success and failure flows to ensure data consistency and preserve aggregate state
- Sagas can publish commands to themselves or other sagas to coordinate multi-step workflows
- Events can be raised by sagas during command handling to notify other components of state changes

**Events**
- Events are published to interested subscribers when state changes occur
- Two primary event subscribers exist in the framework:
- **Aggregates**: React to events from external workflows that impact their domain state
- **Views**: Project event data into optimized read models for query operations

**Views**
- Views subscribe to events and transform domain data into denormalized view models
- View models provide optimized read access for consumers such as UIs or reporting systems
- Data in view models follows eventual consistency patterns

#### v2.0.0 Roadmap (Cloud Integration)

**Command Dispatcher**
- Dispatches commands to cloud-based message queues for distributed processing
- Targets specific command queues based on bounded context routing

**Command Queue**
- A dedicated queue for each bounded context (microservice)
- Routes incoming commands to the appropriate subscribing sagas within the domain

**Event Dispatcher**
- Publishes domain events to cloud-based topics for cross-service communication
- Enables event-driven architecture across distributed systems

**Event Listeners**
- Bootstrap components that listen to subscribed event topics
- Dispatch received events to the appropriate aggregates and views within each domain context
- Enable seamless integration across bounded contexts

#### Architecture
<img src="https://github.com/CodeShayk/SourceFlow.Net/blob/master/Images/Architecture-Complete.png" alt="architecture" style="width:1200px; hieght:700px"/>

### RoadMap

| Package | Version | Release Date |Details |.Net Frameworks|
|------|---------|--------------|--------|-----------|
|SourceFlow|v1.0.0 [![NuGet version](https://badge.fury.io/nu/SourceFlow.svg)](https://badge.fury.io/nu/SourceFlow)|29th Oct 2025|Core functionality for event sourcing and CQRS|[![.Net 10](https://img.shields.io/badge/.Net-10-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) [![.Net 9.0](https://img.shields.io/badge/.Net-9.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0) [![.Net Standard 2.1](https://img.shields.io/badge/.NetStandard-2.1-blue)](https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard2.1.md) [![.Net Standard 2.0](https://img.shields.io/badge/.NetStandard-2.0-blue)](https://github.com/dotnet/standard/blob/v2.0.0/docs/versions/netstandard2.0.md) [![.Net Framework 4.6.2](https://img.shields.io/badge/.Net-4.6.2-blue)](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net46)|
|SourceFlow.Stores.EntityFramework|v1.0.0 [![NuGet version](https://badge.fury.io/nu/SourceFlow.Stores.EntityFramework.svg)](https://badge.fury.io/nu/SourceFlow.Stores.EntityFramework)|29th Oct 2025|Provides store implementation using EF. Can configure different (types of ) databases for each store.|[![.Net 10](https://img.shields.io/badge/.Net-10-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) [![.Net 9.0](https://img.shields.io/badge/.Net-9.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0) [![.Net 8.0](https://img.shields.io/badge/.Net-8.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) |
|SourceFlow.Cloud.AWS|v2.0.0 |(TBC) |Provides support for AWS cloud with cross domain boundary command and Event publishing & subscription.|[![.Net 10](https://img.shields.io/badge/.Net-10-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) [![.Net 9.0](https://img.shields.io/badge/.Net-9.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0) [![.Net 8.0](https://img.shields.io/badge/.Net-8.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)|
|SourceFlow.Cloud.Azure|v2.0.0 |(TBC) |Provides support for Azure cloud with cross domain boundary command and Event publishing & subscription.|[![.Net 10](https://img.shields.io/badge/.Net-10-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) [![.Net 9.0](https://img.shields.io/badge/.Net-9.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0) [![.Net 8.0](https://img.shields.io/badge/.Net-8.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)|

## Getting Started
### Installation
nuget add package SourceFlow.Net
> - dotnet add package SourceFlow.Net
> - dotnet add package SourceFlow.Net.SqlServer (to be released)
> - or your preferred storage
add nuget packages for SourceFlow.Net
> - dotnet add package SourceFlow
> - dotnet add package SourceFlow.Stores.EntityFramework
> - dotnet add package SourceFlow.Cloud.Aws (to be released)
> - Your custom implementation for stores, and cloud.

### Developer Guide
This comprehensive guide provides detailed information about the SourceFlow.Net framework, covering everything from basic concepts to advanced implementation patterns and troubleshooting guidelines.

Please click on [Developer Guide](https://github.com/CodeShayk/SourceFlow.Net/wiki) for complete details.


## Support

If you are having problems, please let me know by [raising a new issue](https://github.com/CodeShayk/SourceFlow.Net/issues/new/choose).
Expand Down
25 changes: 16 additions & 9 deletions SourceFlow.Net.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35828.75
# Visual Studio Version 18
VisualStudioVersion = 18.0.11205.157
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
EndProject
Expand All @@ -17,8 +17,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "misc", "misc", "{4F977993-F
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceFlow.Core.Tests", "tests\SourceFlow.Core.Tests\SourceFlow.Core.Tests.csproj", "{60461B85-D00F-4A09-9AA6-A9D566FA6EA4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceFlow.ConsoleApp", "src\SourceFlow.ConsoleApp\SourceFlow.ConsoleApp.csproj", "{43C0A7B4-6682-4A49-B932-010F0383942A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceFlow", "src\SourceFlow\SourceFlow.csproj", "{C0724CCD-8965-4BE3-B66C-458973D5EFA1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "github", "github", "{F81A2C7A-08CF-4E53-B064-5C5190F8A22B}"
Expand All @@ -31,6 +29,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "github", "github", "{F81A2C
.github\workflows\Release-CI.yml = .github\workflows\Release-CI.yml
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceFlow.Stores.EntityFramework", "src\SourceFlow.Net.EntityFramework\SourceFlow.Stores.EntityFramework.csproj", "{C8765CB0-C453-0848-D98B-B0CF4E5D986F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceFlow.Stores.EntityFramework.Tests", "tests\SourceFlow.Net.EntityFramework.Tests\SourceFlow.Stores.EntityFramework.Tests.csproj", "{C56C4BC2-6BDC-EB3D-FC92-F9633530A501}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -41,22 +43,27 @@ Global
{60461B85-D00F-4A09-9AA6-A9D566FA6EA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60461B85-D00F-4A09-9AA6-A9D566FA6EA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60461B85-D00F-4A09-9AA6-A9D566FA6EA4}.Release|Any CPU.Build.0 = Release|Any CPU
{43C0A7B4-6682-4A49-B932-010F0383942A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43C0A7B4-6682-4A49-B932-010F0383942A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43C0A7B4-6682-4A49-B932-010F0383942A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43C0A7B4-6682-4A49-B932-010F0383942A}.Release|Any CPU.Build.0 = Release|Any CPU
{C0724CCD-8965-4BE3-B66C-458973D5EFA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C0724CCD-8965-4BE3-B66C-458973D5EFA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C0724CCD-8965-4BE3-B66C-458973D5EFA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C0724CCD-8965-4BE3-B66C-458973D5EFA1}.Release|Any CPU.Build.0 = Release|Any CPU
{C8765CB0-C453-0848-D98B-B0CF4E5D986F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C8765CB0-C453-0848-D98B-B0CF4E5D986F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C8765CB0-C453-0848-D98B-B0CF4E5D986F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C8765CB0-C453-0848-D98B-B0CF4E5D986F}.Release|Any CPU.Build.0 = Release|Any CPU
{C56C4BC2-6BDC-EB3D-FC92-F9633530A501}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C56C4BC2-6BDC-EB3D-FC92-F9633530A501}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C56C4BC2-6BDC-EB3D-FC92-F9633530A501}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C56C4BC2-6BDC-EB3D-FC92-F9633530A501}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{60461B85-D00F-4A09-9AA6-A9D566FA6EA4} = {653DCB25-EC82-421B-86F7-1DD8879B3926}
{43C0A7B4-6682-4A49-B932-010F0383942A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{C0724CCD-8965-4BE3-B66C-458973D5EFA1} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{C8765CB0-C453-0848-D98B-B0CF4E5D986F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{C56C4BC2-6BDC-EB3D-FC92-F9633530A501} = {653DCB25-EC82-421B-86F7-1DD8879B3926}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D02B8992-CC81-4194-BBF7-5EC40A96C698}
Expand Down
Loading
Loading