• 1405/04/05

سوال در مورد تفاوت های معماری فعلی با معماری clean کلاسیک :

من یه تحقیقاتی کردم در مورد ساختار فعلیمون که ببینم ایا اصلا داریم درست پیش میریم یا خیر و با این موارد برحوردم متشکر میشم اگه برام روشن کنین این موارد ایا هندل شدن یا دیده شدن چطوریه ؟
۱ . وجود ViewModel در Domain :گفته میشه که در Clean Architecture، Domain باید کاملاً مستقل از UI باشد.

ViewModel متعلق به Presentation/Application است، نه Domain.

۲ . قرار دادن Repositories در Data : پیاده‌سازی Repository باید در Data (Infrastructure) باشد . اما Interface Repository باید در Application (یا گاهی Domain) باشد تا وابستگی‌ها وارونه شود.

۴ . Mapper/Converters/Extensions در Application باید مرزبندی شود:

Mapping بین DTO ↔ Domain معمولاً در Application

Mapping مخصوص UI ↔ ViewModel در Presentation 

Extension method های عمومی بهتره در Shared/BuildingBlocks بروند.

۵ . IOC به‌عنوان لایه مستقل : معمولاً IOC پروژه مستقل نیست؛ بیشتر یک Composition Root در Presentation (مثلاً Program.cs) است.

** برای هر لایه می‌تونی DependencyInjection static class داشته باشی.
این نسخه پیشنهادی و بهتر معرفی شده هست چرا ما از این ساخنار پشتیبانی نکردیم‌؟


src/
  MyApp.Domain/
    Entities/
    ValueObjects/
    DomainServices/
    DomainEvents/
    Enums/
    Exceptions/
    Interfaces (optional)

  MyApp.Application/
    Abstractions/
      Persistence/ (IRepository, IUnitOfWork)
      Services/ (IEmailSender, IDateTimeProvider, ...)
    Features/
      Orders/
        Commands/
        Queries/
        DTOs/
        Validators/
        Handlers/
    Mappings/
    Behaviors/ (MediatR pipeline, validation, logging)

  MyApp.Infrastructure/
    Persistence/
      DbContext/
      Configurations/
      Repositories/ (implementations)
      Migrations/
      Seed/
    Services/ (EmailSender, FileStorage, ...)
    DependencyInjection.cs

  MyApp.Presentation.Web/
    Controllers/
    Views/
    ViewModels/
    Filters/
    DependencyInjection/ (optional)
    Program.cs