معماری لایهای چیست؟
معماری لایهای (Layered Architecture) یکی از متداولترین الگوهای طراحی در توسعه نرمافزار است. این الگو برنامه را به بخشهایی (لایهها) تقسیم میکند که هر کدام مسئول انجام وظایف خاصی هستند. هدف اصلی این الگو جداسازی مسئولیتها، افزایش قابلیت نگهداری و تستپذیری سیستم است.
لایههای معماری چیست؟
در معماری لایهای، معمولاً سیستم به ۴ لایه اصلی تقسیم میشود:
۱. لایه Presentation (نمایش)
این لایه مسئول تعامل با کاربر است. اجزای UI یا APIها در این لایه قرار دارند. این لایه دادهها را از کاربر دریافت و نمایش میدهد.
۲. لایه Application (کاربردی)
منطق برنامه (Business Logic) در این لایه جای دارد. درخواستهایی که از لایه نمایش آمدهاند در اینجا پردازش میشوند.
۳. لایه Domain (دامنه یا هسته کسبوکار)
در این لایه موجودیتها (Entities)، قوانین تجاری و سرویسهای اصلی مدل میشوند. این لایه مستقل از فریمورکها و دیتابیس است و باید مستقل باقی بماند.
۴. لایه Infrastructure (زیرساخت)
ارتباط با منابع خارجی مانند پایگاه داده، فایلها، APIهای خارجی و... در این لایه انجام میشود. معمولاً ابزارهای پیادهسازی در این بخش قرار دارند.
مزایای استفاده از معماری لایهای
- افزایش خوانایی کد و جداسازی وظایف
- آسانی در تست واحد (Unit Testing)
- قابلیت نگهداری سادهتر
- امکان تغییر تکنولوژی در زیرساخت بدون آسیب به بقیه سیستم
- بازاستفاده از منطق کسبوکار در چند نوع رابط کاربری (ویب، موبایل و...)
مثالی واقعی با ASP.NET Core
فرض کنیم قصد داریم یک سیستم ساده مدیریت کاربران ایجاد کنیم:
۱. لایه Domain
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
۲. لایه Application
public interface IUserService
{
Task AddUserAsync(UserDto user);
}
public class UserService : IUserService
{
private readonly IUserRepository _repository;
public UserService(IUserRepository repository)
{
_repository = repository;
}
public async Task AddUserAsync(UserDto user)
{
var entity = new User
{
FirstName = user.FirstName,
LastName = user.LastName
};
await _repository.AddAsync(entity);
}
}
۳. لایه Infrastructure
public class UserRepository : IUserRepository
{
private readonly AppDbContext _context;
public UserRepository(AppDbContext context)
{
_context = context;
}
public async Task AddAsync(User user)
{
_context.Users.Add(user);
await _context.SaveChangesAsync();
}
}
۴. لایه Presentation
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
private readonly IUserService _service;
public UserController(IUserService service)
{
_service = service;
}
[HttpPost]
public async Task Create(UserDto dto)
{
await _service.AddUserAsync(dto);
return Ok();
}
}
نکاتی برای استفاده بهتر از معماری لایهای
- از وابستگی معکوس (Dependency Inversion) استفاده کنید تا لایه بالا به پایین وابسته نباشد.
- هر لایه باید فقط با لایه مجاور خود در ارتباط باشد.
- برای تستپذیری بیشتر، از اینترفیسها استفاده کنید.
- تلاش کنید منطق تجاری را در لایه Presentation قرار ندهید.
سخن پایانی
معماری لایهای یک ساختار ساده و منطقی برای شروع پروژههای نرمافزاری است. این مدل به توسعهدهندگان کمک میکند که سیستمهای خود را با کیفیت بهتر و قابلیت نگهداری بالاتری طراحی کنند. اگر در حال کار با ASP.NET Core یا دیگر فریمورکها هستید، استفاده از این معماری میتواند به بهبود ساختار پروژه و تسهیل فرآیند توسعه کمک کند.
برای آموزش بیشتر میتوانید از دوره جامع معماری تمیز در ASP.NET Core استفاده کنید.