{"id":37032245,"url":"https://github.com/roadtoagility/dflow","last_synced_at":"2026-01-14T03:57:34.733Z","repository":{"id":40252521,"uuid":"275362660","full_name":"roadtoagility/dflow","owner":"roadtoagility","description":"DFlow is a Domain-Driven Design platform that provides the infrastructure to organize business logic, design your domain model, deliver domain events and store in different formats.","archived":false,"fork":false,"pushed_at":"2024-09-03T21:31:17.000Z","size":1407,"stargazers_count":15,"open_issues_count":9,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-11-10T16:31:48.018Z","etag":null,"topics":["aggregates","cqrs","ddd","dflow","dflow-nuget","domainevents","event-sourcing","eventdriven","persistence"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/roadtoagility.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.TXT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-06-27T11:56:38.000Z","updated_at":"2024-02-22T22:16:54.000Z","dependencies_parsed_at":"2023-10-16T14:13:19.435Z","dependency_job_id":"7924d7f8-f807-4f9a-893d-9d54f617e2bd","html_url":"https://github.com/roadtoagility/dflow","commit_stats":{"total_commits":434,"total_committers":7,"mean_commits":62.0,"dds":"0.36866359447004604","last_synced_commit":"aea989dbbfa7fce4ee64e00b7ba2d44fc1293a44"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/roadtoagility/dflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roadtoagility%2Fdflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roadtoagility%2Fdflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roadtoagility%2Fdflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roadtoagility%2Fdflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roadtoagility","download_url":"https://codeload.github.com/roadtoagility/dflow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roadtoagility%2Fdflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408924,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aggregates","cqrs","ddd","dflow","dflow-nuget","domainevents","event-sourcing","eventdriven","persistence"],"created_at":"2026-01-14T03:57:34.180Z","updated_at":"2026-01-14T03:57:34.726Z","avatar_url":"https://github.com/roadtoagility.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ccenter\u003e\u003cimg src=\"docs/img/logodflow_200x200.png\" width=\"350\" /\u003e\u003c/center\u003e\n\n# DFlow - Domain Flow\n\nIt is a set of framework to learn, organize and accelerate development of the heart of software.\n\n## Package source\n\n```shell\n\u003crepository url=\"https://github.com/roadtoagility/dflow\" /\u003e\n```\n\n\n## Project Informations\n[![GitHub issues](https://img.shields.io/github/issues/roadtoagility/dflow)](https://img.shields.io/github/issues/roadtoagility/dflow)\n[![GitHub stars](https://img.shields.io/github/stars/roadtoagility/dflow)](https://github.com/roadtoagility/dflow/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/roadtoagility/dflow)](https://github.com/roadtoagility/dflow/network)\n[![GitHub license](https://img.shields.io/github/license/roadtoagility/dflow)](https://github.com/roadtoagility/dflow/blob/master/LICENSE.TXT)\n\n## Code Quality\n[![codecov](https://codecov.io/gh/roadtoagility/dflow/branch/develop/graph/badge.svg?token=5I6T20JZC8)](https://codecov.io/gh/roadtoagility/dflow)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/008ea00243504ac5ab31a24ebed9e5e8)](https://www.codacy.com/gh/roadtoagility/dflow/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=roadtoagility/dflow\u0026amp;utm_campaign=Badge_Grade)\n[![CodeQL](https://github.com/roadtoagility/dflow/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/roadtoagility/dflow/actions/workflows/codeql-analysis.yml)\n\n## CI Status\n[![Build and Testing](https://github.com/roadtoagility/dflow/actions/workflows/dotnet.yml/badge.svg)](https://github.com/roadtoagility/dflow/actions/workflows/dotnet.yml/badge.svg)\n\n## Breaking Changes in 0.6.3 -\u003e v0.8.0\n\nThat is a major refactoring of DFlow to be more \"friendly\" and have consistent programming model.\n\n- DFlow.Business will be maintained any more\n- DFlow.Business.Cqrs will be maintained any more\n- DFlow.Domain become DFlow (back to origins :)\n- DFlow.Specifications become a separated assembly\n- BaseEntity -\u003e EntityBase\n- All Events must inherits from DomainEvent abstract class\n- There a new interface to raise events, so events can be raised from Entities or via Aggregates as you need.\n- DFlow.Domain.Events merged with DFlow and had several APIs changes\n\n## About Project\n\nDomain Flow aka **DFlow** is a very light and opnionated set of frameworks to help implement the hearth of applications based on Domain-Driven Design. There are 3 assemblys organized as described bellow:\n\n- **DFlow**: Core assembly providing objets to implement Entities, ValueObjects, Validations and Aggregates;\n- **DFlow.Specifications**: It is a Specification Design Pattern implementation;\n- **DFlow.Persistence**: This project depends on DFlow because it is responsible to translate from/to domain objects  representation. It is a set os interfaces to materialize domain layer to be persisted in any format that you want. The 3 major patterns implemented are Unity Of Work and Repository.\n\nAddon: DFlow.Persistence.\nDFlow as based on clean architecture principles, so domain layer aka Entities are first class citizen.   \n\n## Usage\n\n### Referencing DFlow\n```shell\n\n```\n\n\n### Creating Domain objects\n\n1. The most basic DFlow business object is the **Value Object** implementation that allows you follow the principle of non-primitive obsession for the objects you want. \n\n```c#\n// Value Object\npublic sealed class Email : ValueOf\u003cstring,Email\u003e\n{\n\n}\n```\n\n2. Defining and Entity\n\n```c#\n// Entity\npublic class User : EntityBase\u003cUserId\u003e\n{\n    public User(UserId identity, Email mail, VersionId version)\n        : base(identity, version)\n    {\n        Mail = mail;\n\n        AppendValidationResult(identity.ValidationStatus.Failures);\n        AppendValidationResult(mail.Failures);\n    }\n\n    public Email Mail { get; private set; }\n\n    protected override IEnumerable\u003cobject\u003e GetEqualityComponents()\n    {\n        yield return Identity;\n        yield return Mail;\n    }\n\n    // DOmain objects can have static contualized api based on factory methods\n    public static PrimaryEntity From(PrimaryEntityId id, SecondaryEntity secondary, SimpleValueObject simpleObject,\n        VersionId version)\n    {\n        return new PrimaryEntity(id, secondary, simpleObject, version);\n    }\n\n    // Domain Objects can have instance business methods\n    // Entities can raise events\n    public void Update(Email mail)\n    {\n        if (!mail.ValidationStatus.IsValid)\n        {\n            AppendValidationResult(mail.ValidationStatus.Failures);\n        }\n\n        Mail = mail;\n        RaisedEvent(UserMailUpdatedEvent.For(this));\n    }\n\n}\n```\n\n## Contributors\n* Adriano Ribeiro [@drr00t](https://github.com/drr00t)\n* Douglas José Ramalho Araujo [@dougramalho](https://github.com/dougramalho)\n* Marco V Gurrola [@marcovgurrola](https://github.com/marcovgurrola)\n* Zama Bandeira Braga [@zamabraga](https://github.com/zamabraga)\n\n\n## Supporters\n\n| Supporter                                                            | Description                                                                                                                         | \n|----------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|\n| \u003cimg src=\"img/jetbrains-variant-4.png\" alt=\"./img/\" width=\"200px\" /\u003e | All Products Pack License for Open Source under program [**Free License Programs**](https://www.jetbrains.com/community/education/) |\n\n## Thanks\nA special thank you to [Jetbrains](http://jetbrains.com/) for donating licenses to the project.\n\n## License\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froadtoagility%2Fdflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froadtoagility%2Fdflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froadtoagility%2Fdflow/lists"}