محصولات

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ها و رفتارهای مشخص را برای ساخت نرم‌افزارهای سازمانی فراهم می‌کند.

01

.NET 10+

قابل استفاده در برنامه‌های مدرن مبتنی بر .NET 10 و بالاتر.

02

Clean Architecture

جداسازی مسئولیت‌ها و کاهش وابستگی لایه‌های اصلی سیستم.

03

DDD

ساختار مناسب برای مدل‌سازی Domain و نگهداری منطق کسب و کار در هسته سیستم.

04

CQRS

تفکیک مسیرهای Command و Query و امکان اعمال رفتارهای مشترک در Pipeline.

05

Dapper

دسترسی سبک و مستقیم به داده با استفاده از Dapper و Repositoryهای عمومی CUD.

06

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 را از منطق اصلی برنامه جدا کند.

01API / Endpointsورودی سیستم
02Commands / QueriesApplication Layer
03DomainBusiness Logic
AuthorizationABAC / Policies
Unit of WorkTransactions
AuditAudit Helpers
RepositoryDapper / Data

Capabilities

قابلیت‌های اصلی Gamma.Kernel

اجزای Kernel برای حل مسائل تکرارشونده در نرم‌افزارهای سازمانی طراحی شده‌اند.

01

CQRS Pipeline

تعریف Command و Query و اجرای Handlerها از طریق Pipelineهای قابل توسعه.

02

Authorization

اعمال کنترل دسترسی و Authorization در مسیر اجرای درخواست‌ها، از جمله سناریوهای ABAC.

03

Unit of Work

مدیریت Context تراکنش و هماهنگ‌سازی عملیات داده در یک واحد کاری مشخص.

04

Audit

فراهم کردن helperهای سبک برای ثبت تغییرات و رویدادهای مرتبط با Entityها.

05

Dapper Integration

Repositoryهای عمومی CUD، mapping مبتنی بر attribute و پشتیبانی از عملیات تراکنشی.

06

Entity Helpers

Attributeهای کمکی مانند Identity، InsertOnly و RowVersion برای مدیریت رفتار Entityها.

07

Infrastructure Abstractions

abstractionهایی مانند IClock و ICurrentUser برای کاهش وابستگی Domain و Application به زیرساخت.

08

Framework Agnostic

هسته‌ای سبک که بدون تحمیل یک Framework یا Database خاص در ساختار برنامه قرار می‌گیرد.

Concepts

مفاهیمی که Kernel بر پایه آن‌ها ساخته شده است

01

Clean Architecture

وابستگی‌ها باید به سمت داخل معماری حرکت کنند و Domain نباید به جزئیات زیرساخت وابسته باشد.

02

Domain-Driven Design

Domain محل اصلی منطق کسب و کار است و سایر لایه‌ها باید در خدمت آن قرار بگیرند.

03

CQRS

عملیات خواندن و تغییر وضعیت سیستم در مسیرهای جداگانه مدل می‌شوند.

04

Cross-Cutting Concerns

موضوعاتی مانند Authorization، Audit و Transaction از منطق اصلی درخواست جدا می‌شوند.

Request Pipeline

مسیر اجرای یک درخواست

Pipelineها امکان اعمال رفتارهای مشترک را بدون قراردادن آن‌ها در منطق هر Handler فراهم می‌کنند.

01RequestCommand / Query
02AuthorizationAccess Control
03HandlerApplication Logic
04Unit of WorkTransaction
05AuditCross-Cutting

Code

کدی ساده، ساختاری مشخص

یکی از اهداف Gamma.Kernel این است که معماری پیچیده را بدون اضافه کردن abstractionهای غیرضروری قابل استفاده نگه دارد.

Gamma.Kernel.NET 10+
public interface IUnitOfWork
          {
            IDbConnection Connection { get; }
            IDbTransaction? Transaction { get; }
          void OnCommitted(
              Func<CancellationToken, Task> action);
          IDbTransaction BeginTransactionIfNeeded();
          }

نمونه بالا بخشی از قرارداد واقعی `IUnitOfWork` در Repository رسمی Gamma.Kernel است.

Use Cases

برای چه پروژه‌هایی مناسب است؟

01

نرم‌افزارهای سازمانی

سیستم‌هایی که Domain پیچیده، تراکنش‌های متعدد و نیاز به کنترل دسترسی دارند.

02

محصولات SaaS

برنامه‌هایی که باید در طول زمان توسعه پیدا کنند و ساختار معماری آن‌ها قابل نگهداری باقی بماند.

03

سیستم‌های CQRS / DDD

پروژه‌هایی که از Command و Query جداگانه و مدل‌سازی Domain استفاده می‌کنند.

04

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
      └─ EndPoints

Roadmap

مسیر توسعه Gamma.Kernel

موارد زیر بخشی از مسیر توسعه آینده پروژه هستند و نباید به عنوان قابلیت‌های فعلی Kernel معرفی شوند.

01

Domain Events

افزودن abstraction برای Domain Events.

02

Outbox Pattern

فراهم کردن زیرساخت مناسب برای سناریوهای Outbox.

03

Observability

توسعه hookهای بهتر برای Metrics، Logging و Tracing.

04

Application Generator

تولید بخش‌هایی از Application بر اساس Entityها.

05

CQRS Pipeline Extensions

توسعه قابلیت‌های بیشتر برای Pipelineهای CQRS.

06

Test Harnesses

نمونه‌ها و ابزارهای بهتر برای تست و توسعه.

Open Source

Gamma.Kernel را در GitHub ببینید

کد منبع، مستندات، نمونه‌ها و مسیر توسعه پروژه در Repository رسمی Gamma.Kernel قرار دارد.

GitHub Repository

FAQ

سؤالات متداول

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 می‌تواند بخشی از مسئولیت‌های تکرارشونده معماری را در یک هسته قابل استفاده مجدد متمرکز کند.