Open Source · .NET 10+
Gamma.Kernel
Enterprise Application Framework for .NET
یک هسته سبک و قابل استفاده مجدد برای توسعه نرمافزارهای سازمانی مبتنی بر Clean Architecture، DDD و CQRS؛ با تمرکز بر سادهسازی منطق زیرساختی و دغدغههای مشترک سیستمهای بزرگ.
Gamma.Kernel مدیریت Command و Query، مجوزها، تراکنشها، Unit of Work، Audit و دسترسی به داده را در یک هسته کوچک و قابل توسعه متمرکز میکند.
Technology
بر پایه فناوریهای شناختهشده .NET
Gamma.Kernel به جای ارائه یک پلتفرم سنگین، مجموعهای از abstractionها و رفتارهای مشخص را برای ساخت نرمافزارهای سازمانی فراهم میکند.
.NET 10+
قابل استفاده در برنامههای مدرن مبتنی بر .NET 10 و بالاتر.
Clean Architecture
جداسازی مسئولیتها و کاهش وابستگی لایههای اصلی سیستم.
DDD
ساختار مناسب برای مدلسازی Domain و نگهداری منطق کسب و کار در هسته سیستم.
CQRS
تفکیک مسیرهای Command و Query و امکان اعمال رفتارهای مشترک در Pipeline.
Dapper
دسترسی سبک و مستقیم به داده با استفاده از Dapper و Repositoryهای عمومی CUD.
SQL Server
پشتیبانی از سناریوهای مبتنی بر SQL Server در لایه داده.
Why Gamma.Kernel
برای کنترل پیچیدگی نرمافزارهای سازمانی
در پروژههای بزرگ، بخش قابل توجهی از پیچیدگی نرمافزار مربوط به منطق مشترکی است که در بسیاری از بخشهای سیستم تکرار میشود. Gamma.Kernel این مسئولیتها را در یک هسته کوچک و مشخص متمرکز میکند.
تمرکز بر Domain
منطق اصلی کسب و کار را از جزئیات زیرساختی جدا نگه دارید.
کاهش کد تکراری
رفتارهای مشترک مانند Audit، Authorization و Transaction در سطح Pipeline و Infrastructure مدیریت میشوند.
قابل استفاده مجدد
Kernel را در پروژههای مختلف سازمانی و SaaS استفاده کنید بدون اینکه به یک پلتفرم سنگین وابسته شوید.
Opinionated اما انعطافپذیر
ساختار و الگوهای مشخص ارائه میشود، اما Kernel شما را به یک Framework یا Database خاص محدود نمیکند.
Architecture
ساختار ساده برای معماری پیچیده
Gamma.Kernel تلاش میکند مرزهای معماری را روشن نگه دارد و دغدغههای Cross-Cutting را از منطق اصلی برنامه جدا کند.
Capabilities
قابلیتهای اصلی Gamma.Kernel
اجزای Kernel برای حل مسائل تکرارشونده در نرمافزارهای سازمانی طراحی شدهاند.
CQRS Pipeline
تعریف Command و Query و اجرای Handlerها از طریق Pipelineهای قابل توسعه.
Authorization
اعمال کنترل دسترسی و Authorization در مسیر اجرای درخواستها، از جمله سناریوهای ABAC.
Unit of Work
مدیریت Context تراکنش و هماهنگسازی عملیات داده در یک واحد کاری مشخص.
Audit
فراهم کردن helperهای سبک برای ثبت تغییرات و رویدادهای مرتبط با Entityها.
Dapper Integration
Repositoryهای عمومی CUD، mapping مبتنی بر attribute و پشتیبانی از عملیات تراکنشی.
Entity Helpers
Attributeهای کمکی مانند Identity، InsertOnly و RowVersion برای مدیریت رفتار Entityها.
Infrastructure Abstractions
abstractionهایی مانند IClock و ICurrentUser برای کاهش وابستگی Domain و Application به زیرساخت.
Framework Agnostic
هستهای سبک که بدون تحمیل یک Framework یا Database خاص در ساختار برنامه قرار میگیرد.
Concepts
مفاهیمی که Kernel بر پایه آنها ساخته شده است
Clean Architecture
وابستگیها باید به سمت داخل معماری حرکت کنند و Domain نباید به جزئیات زیرساخت وابسته باشد.
Domain-Driven Design
Domain محل اصلی منطق کسب و کار است و سایر لایهها باید در خدمت آن قرار بگیرند.
CQRS
عملیات خواندن و تغییر وضعیت سیستم در مسیرهای جداگانه مدل میشوند.
Cross-Cutting Concerns
موضوعاتی مانند Authorization، Audit و Transaction از منطق اصلی درخواست جدا میشوند.
Request Pipeline
مسیر اجرای یک درخواست
Pipelineها امکان اعمال رفتارهای مشترک را بدون قراردادن آنها در منطق هر Handler فراهم میکنند.
Code
کدی ساده، ساختاری مشخص
یکی از اهداف Gamma.Kernel این است که معماری پیچیده را بدون اضافه کردن abstractionهای غیرضروری قابل استفاده نگه دارد.
public interface IUnitOfWork
{
IDbConnection Connection { get; }
IDbTransaction? Transaction { get; }
void OnCommitted(
Func<CancellationToken, Task> action);
IDbTransaction BeginTransactionIfNeeded();
}نمونه بالا بخشی از قرارداد واقعی `IUnitOfWork` در Repository رسمی Gamma.Kernel است.
Use Cases
برای چه پروژههایی مناسب است؟
نرمافزارهای سازمانی
سیستمهایی که Domain پیچیده، تراکنشهای متعدد و نیاز به کنترل دسترسی دارند.
محصولات SaaS
برنامههایی که باید در طول زمان توسعه پیدا کنند و ساختار معماری آنها قابل نگهداری باقی بماند.
سیستمهای CQRS / DDD
پروژههایی که از Command و Query جداگانه و مدلسازی Domain استفاده میکنند.
Codebaseهای بلندمدت
نرمافزارهایی که قرار است برای سالها توسعه و نگهداری شوند.
Project Structure
یک ساختار پیشنهادی برای پروژه
/src
├─ Gamma.Kernel
│ ├─ Abstractions
│ ├─ Behaviors
│ ├─ Transactions
│ └─ Common
│
├─ MyApp.Domain
│ ├─ Entities
│ ├─ ValueObjects
│ └─ DomainServices
│
├─ MyApp.Application
│ ├─ Commands
│ ├─ Queries
│ └─ DTOs
│
├─ MyApp.Infra
│ ├─ Data
│ ├─ Logging
│ └─ Services
│
└─ MyApp.Api
└─ EndPointsRoadmap
مسیر توسعه Gamma.Kernel
موارد زیر بخشی از مسیر توسعه آینده پروژه هستند و نباید به عنوان قابلیتهای فعلی Kernel معرفی شوند.
Domain Events
افزودن abstraction برای Domain Events.
Outbox Pattern
فراهم کردن زیرساخت مناسب برای سناریوهای Outbox.
Observability
توسعه hookهای بهتر برای Metrics، Logging و Tracing.
Application Generator
تولید بخشهایی از Application بر اساس Entityها.
CQRS Pipeline Extensions
توسعه قابلیتهای بیشتر برای Pipelineهای CQRS.
Test Harnesses
نمونهها و ابزارهای بهتر برای تست و توسعه.
Open Source
Gamma.Kernel را در GitHub ببینید
کد منبع، مستندات، نمونهها و مسیر توسعه پروژه در Repository رسمی Gamma.Kernel قرار دارد.
GitHub RepositoryFAQ
سؤالات متداول
Gamma.Kernel چیست؟
Gamma.Kernel یک هسته سبک و opinionated برای ساخت برنامههای .NET با استفاده از CQRS، Clean Architecture و DDD است.
Gamma.Kernel برای چه نسخهای از .NET است؟
نسخه فعلی پروژه برای .NET 10+ طراحی شده است.
آیا Gamma.Kernel یک Framework کامل است؟
خیر. Kernel مجموعهای سبک از abstractionها، behaviorها و ابزارهای زیرساختی است و قرار نیست تمام معماری برنامه را به یک Framework خاص وابسته کند.
آیا Gamma.Kernel متنباز است؟
بله. Repository رسمی پروژه در GitHub در دسترس است.
آیا Gamma.Kernel از Dapper استفاده میکند؟
بله. Kernel یکپارچهسازی با Dapper و Repositoryهای عمومی برای عملیات CUD را فراهم میکند.
Gamma.Kernel
یک هسته کوچک برای نرمافزارهای بزرگ
اگر روی یک سیستم سازمانی مبتنی بر .NET کار میکنید، Gamma.Kernel میتواند بخشی از مسئولیتهای تکرارشونده معماری را در یک هسته قابل استفاده مجدد متمرکز کند.
