Majal 1.0.0-alpha.18
See the version list below for details.
dotnet add package Majal --version 1.0.0-alpha.18
NuGet\Install-Package Majal -Version 1.0.0-alpha.18
<PackageReference Include="Majal" Version="1.0.0-alpha.18" />
<PackageVersion Include="Majal" Version="1.0.0-alpha.18" />
<PackageReference Include="Majal" />
paket add Majal --version 1.0.0-alpha.18
#r "nuget: Majal, 1.0.0-alpha.18"
#:package Majal@1.0.0-alpha.18
#addin nuget:?package=Majal&version=1.0.0-alpha.18&prerelease
#tool nuget:?package=Majal&version=1.0.0-alpha.18&prerelease
<div align="center"> <img src="assets/logo.svg" alt="Majal Logo" width="200" /> </div>
<div align="center" style="margin-top: 20px;">
</div>
Overview
Majal is a C# source generator library that helps you implement Domain-Driven Design (DDD) patterns with minimal boilerplate. It provides source generators for:
- Entities
- Aggregates
- Value Objects
- Archivables (Soft-deletion)
- Auditables (Creation/Update tracking)
- Localizables (Multi-language support)
- Ordinals (Sort order)
The library ships as a Roslyn analyzer/source generator package that can be referenced from any .NET project.
NuGet Package
<PackageReference Include="Majal" Version="<VERSION>" />
The package contains the generators and the required analyzer DLL (Majal.dll).
Quick Start
- Add the package to your project.
- Mark your domain classes with the appropriate attributes (
[Aggregate],[Entity],[ValueObject],[Auditable],[Archivable], etc.). - Build the project - the source generator will emit the boilerplate code.
Example
using Majal.Samples;
var employee = Empolyee.Create(
new EmpolyeeName("John"),
EmpolyeeInformation.Create(
EmpolyeePhone.Create("123456789", "US"),
EmpolyeeAddress.Create("New York", "USA", "10001")
)
);
Console.WriteLine(employee);
[Entity]
[Aggregate]
[Auditable, Archivable]
public partial class Empolyee
{
public static Empolyee Create(EmpolyeeName name, EmpolyeeInformation information)
{
return new Empolyee
{
Id = 1,
Name = name,
Information = information,
CreatedOn = DateTimeOffset.Now
};
}
public required EmpolyeeName Name { get; init; }
public required EmpolyeeInformation Information { get; init; }
public override string ToString() =>
$"Id : {Id} | Name : {Name} | Address : {Information.Address} | Phone : {Information.Phone} | CreatedOn : {CreatedOn}";
}
[ValueObject<string>]
public partial class EmpolyeeName;
[Entity<int>]
public partial class EmpolyeeInformation
{
public static EmpolyeeInformation Create(EmpolyeePhone phone, EmpolyeeAddress address)
{
return new EmpolyeeInformation
{
Phone = phone,
Address = address
};
}
public required EmpolyeePhone Phone { get; init; }
public required EmpolyeeAddress Address { get; init; }
}
[ValueObject]
public partial class EmpolyeeAddress
{
public required string City { get; init; }
public required string Country { get; init; }
public required string PostalCode { get; init; }
public static partial EmpolyeeAddress Create(string city, string country, string postalCode)
{
return new EmpolyeeAddress
{
City = city,
Country = country,
PostalCode = postalCode
};
}
private partial IEnumerable<object?> GetEqualityComponents()
{
yield return City;
yield return Country;
yield return PostalCode;
}
}
The Empolyee, EmpolyeeName, EmpolyeeInformation, and EmpolyeeAddress types are automatically enriched by the generators.
Building the Project
The solution targets .NET Standard 2.0 and can be built with the .NET CLI:
# Restore packages
dotnet restore
# Build the generators
dotnet build src/Majal/Majal.csproj -c Release
The generated analyzer DLL will be placed in src/Majal/bin/Debug/netstandard2.0/ (or Release folder).
Running Tests
The repository contains a test project (Majal.Tests). To run the unit tests:
dotnet test tests/Majal.Tests/Majal.Tests.csproj
Documentation
- Getting Started
- Aggregates Guide
- Entities Guide
- Value Objects Guide
- Archivables Guide
- Auditables Guide
- Localizables Guide
- Ordinals Guide
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
Aknowledgements
This library implementation is based on the domain-driven design components found in CSharpFunctionalExtensions
License
This project is licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0-alpha.36 | 50 | 5/23/2026 |
| 1.0.0-alpha.35 | 49 | 5/23/2026 |
| 1.0.0-alpha.34 | 54 | 5/21/2026 |
| 1.0.0-alpha.33 | 48 | 5/20/2026 |
| 1.0.0-alpha.32 | 52 | 5/19/2026 |
| 1.0.0-alpha.31 | 49 | 5/19/2026 |
| 1.0.0-alpha.30 | 53 | 5/18/2026 |
| 1.0.0-alpha.29 | 58 | 5/15/2026 |
| 1.0.0-alpha.28 | 51 | 5/14/2026 |
| 1.0.0-alpha.27 | 48 | 5/4/2026 |
| 1.0.0-alpha.26 | 51 | 5/2/2026 |
| 1.0.0-alpha.25 | 58 | 4/24/2026 |
| 1.0.0-alpha.24 | 61 | 4/22/2026 |
| 1.0.0-alpha.23 | 57 | 4/18/2026 |
| 1.0.0-alpha.22 | 60 | 4/17/2026 |
| 1.0.0-alpha.21 | 62 | 4/13/2026 |
| 1.0.0-alpha.20 | 60 | 4/13/2026 |
| 1.0.0-alpha.19 | 55 | 4/10/2026 |
| 1.0.0-alpha.18 | 60 | 4/10/2026 |
| 1.0.0-alpha.17 | 53 | 4/9/2026 |