مقدمهای بر معماری Clean
معماری Clean (تمیز) مفهومی است که توسط Robert C. Martin (عمو باب) معرفی شده است تا توسعه نرمافزار را ساختارمند و پایدار سازد. این معماری با جدا کردن بخشهای مختلف برنامه، وابستگیها را کاهش داده، تستنویسی را آسانتر و نگهداری پروژه را سادهتر میکند.
چرا معماری Clean؟
در پروژههای بزرگ، افزایش پیچیدگی موجب میشود تغییرات در یک بخش باعث ایجاد اختلال در سایر بخشها شود. معماری Clean با اعمال چند اصل، از جمله:
- جدا کردن لایههای منطق دامنه، زیرساخت، ارائه و اپلیکیشن
- به کارگیری الگوی وابستگی معکوس
- استفاده از اصول SOLID
پایداری و توسعهپذیری را به پروژه اضافه میکند.
ساختار لایهای معماری Clean
معماری Clean از چهار لایه اصلی تشکیل شده است:
- Domain: شامل مدلهای دامنه و Interfaceهای اصلی
- Application: شامل سرویسها، واسطها و Use Caseها
- Infrastructure: پیادهسازی واسطها مانند دیتابیس، ایمیل، فایل سیستم و ...
- Presentation (یا WebUI): لایهای برای نمایش یا کنترلرها که واسط کاربر را ارائه میدهند
وابستگی معکوس (Dependency Rule)
در معماری Clean، لایههای داخلی نباید به لایههای بیرونی وابستگی داشته باشند. بنابراین Domain نمیتواند از Infrastructure استفاده کند، اما Infrastructure میتواند Interfaceهای تعریفشده در Domain را پیادهسازی نماید.
پیادهسازی معماری Clean در ASP.NET Core
برای پیادهسازی این معماری، مراحل زیر را دنبال کنید:
۱. ساخت پروژه اولیه
dotnet new sln -n CleanArchitectureDemo
cd CleanArchitectureDemo
۲. ایجاد پروژههای جداگانه
dotnet new classlib -n MyApp.Domain
dotnet new classlib -n MyApp.Application
dotnet new classlib -n MyApp.Infrastructure
dotnet new webapi -n MyApp.WebUI
سپس پروژهها را به فایل solution اضافه کنید.
dotnet sln add MyApp.Domain\MyApp.Domain.csproj
...
۳. تعریف Entity در Domain
// MyApp.Domain/Entities/Product.cs
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
}
۴. تعریف Interface در Application
// MyApp.Application/Interfaces/IProductRepository.cs
public interface IProductRepository
{
Task GetByIdAsync(int id);
}
۵. پیادهسازی در Infrastructure
// MyApp.Infrastructure/Repositories/ProductRepository.cs
public class ProductRepository : IProductRepository
{
public async Task GetByIdAsync(int id)
{
// پیادهسازی دیتابیس واقعی
return new Product { Id = id, Name = ❝Test Product❝ };
}
}
۶. تزریق وابستگی در WebUI
// MyApp.WebUI/Program.cs
builder.Services.AddScoped<IProductRepository, ProductRepository>();
مزایای استفاده از معماری Clean
- قابلیت تست واحد توسعهیافته
- ماژولار بودن و قابلیت جایگزینی آسان سرویسها
- افزایش قابلیت نگهداری کد
- پشتیبانی طبیعی از TDD و اصول SOLID
نکات مهم در اجرای معماری Clean
- نامگذاری پروژهها و پوشهها اهمیت دارد
- وابستگیها باید فقط از داخل به خارج تنظیم شوند
- پوشش تستها هر لایه باید جداگانه انجام شود
جمعبندی
معماری Clean در ASP.NET Core راه حلی قدرتمند برای ساختاردهی پروژهها است که طراحان نرمافزار را قادر میسازد تا سیستمهایی توسعهپذیر، قابل تست و نگهداری ایجاد کنند. با رعایت اصول این معماری، پروژهای ماژولار و مقیاسپذیر خواهید داشت.
برای یادگیری بیشتر میتوانید به دوره معماری Clean در ASP.NET Core مراجعه کنید.