من یه تحقیقاتی کردم در مورد ساختار فعلیمون که ببینم ایا اصلا داریم درست پیش میریم یا خیر و با این موارد برحوردم متشکر میشم اگه برام روشن کنین این موارد ایا هندل شدن یا دیده شدن چطوریه ؟
۱ . وجود 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