سلام دوستان
در مورد معماری پیاز مطالعات زیادی کردم و توی گوگل هم در مورد Onion Structure یا همون معماری پیازی تحقیق کردم. چند تا سوال داشتم در رابطه با این معماری
برای پیاده سازی نرم افزارها معماری های مختلفی به وجود اومده که در طول زمان این معماری ها تغییراتی را داشته اند. تقریبا میشه گفت به ترتیب معماری های زیر بوده
این معماری های ادامه یکدیگر هستند. یعنی وقتی شما در پروژه خودتون از معماری پیازی استفاده می کنید تا حدودی معماری تمیز یا Clean Architecture هم استفاده کردید.
در مورد معماری تمیز یا Clean Architecture می تونید این لینک رو مطالعه کنید. در این جا میخوام بیشتر تمرکز رو روی معماری پیازی قرار بدم.
معماری پیازی چیست ؟
به طور کلی میشه گفت:
به ترکیب بالا معماری پیازی گفته میشه. اگر در شکل زیر نگاه کنید دقیقا متوجه میشید که چه ساختاری رو باید در پروژه خودتون پیاده سازی کنید
پیاده سازی معماری پیازی در Asp.net Core به صورت مرحله به مرحله :
خب حالا یک مثال ساده از پیاده سازی معماری پیازی در Asp.net Core و با استفاده از Entity Framwork می بینیم.
یک کلاس به نام Customer با فیلدهای زیر ایجاد می کنیم. در واقع این انتیتی یا کلاس همان جدول ما در دیتابیس خواهد بود
public class Customer
{
[Key]
public int Id { get; set; }
public string CustomerName { get; set; }
public string CustomerAddress { get; set; }
}
مرحل دوم : اجرای یک کویری روی انتیتی
حال فرض کنید می خواهیم لیستی از مشتریان را نمایش بدهیم. فرض ما بر این استکه کلاسی هم به نام ApplicationDbContext داریم که نقش دیتابیس در پروژه را بر عهده دارد. خب در معماری پیازی باید همه کویری ها از طریق Repository ها اجرا شوند. بنابراین یک کلاس به نام CustomerRepository ایجاد می کنیم و کویری مورد نظر را درون آن می نویسیم :
public class CustomerRepository
{
private readonly ApplicationDbContext _db;
public CustomerRepository(ApplicationDbContext db)
{
_db = db;
}
public IEnumerable<Customer> CustomerList()
{
var model = _db.Customer_Tbl.ToList();
return model;
}
}
مرحله سوم : ایجاد اینترفیس یا لایه سرویس
خب در مرحله قبل یک کلاس ریپازیتوری ایجاد کردیم و درون اون هم کویری مورد نظر را نوشتیم. حالا برای استفاده از این کویری باید از طریق لایه Service این کار را انجام بدهیم. بنابراین یک اینترفیس مشابه زیر ایجاد می کنیم :
public interface ICustomerRepository
{
IEnumerable<Customer> CustomerList();
}
همانطوری که ملاحظه می کنید درون اینترفیس فقط نام و نوع تابعی که درون ریپازیتوری بود را تعریف کردیم. حالا باید در کلاس CustomerRepository اینترفیس مربوطه را معرفی کنیم.
public class CustomerRepository : ICustomerRepository
{
...
}
خب تا اینجا ریپازیتوری و اینترفیس مربوط به آن ایجاد شد. دقت کنید که ترکیب یک ریپازیتوری و اینترفیس تشکیل یک Service را میدهد. بنابراین در کلاس StartUp.cs و در متد ConfigureService باید این سرویس را معرفی و راه اندازی کنیم :
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<ICustomerRepository, CustomerRepository>();
{
مرحله چهارم : تزریق در کنترلر
در این مرحله می خواهیم در لایه UI یا همان کنترلر از این سرویس استفاده کنیم. یکی از قابلیتهای خوبی که در Asp.net Core وجود دارد پشتیبانی بسیار عالی از تزریق وابستگی یا DependencyInjection می باشد. بنابراین میتوانیم به راحتی با استفاده از این قابلیت ار لایه سرویس استفاده کنیم.
public class HomeController : Controller
{
private readonly ICustomerRepository _icustomer;
public HomeController(ICustomerRepository icustomer)
{
_icustomer = icustomer;
}
public IActionResult Index()
{
var model = _icustomer.CustomerList();
return View(model);
}
}
همانطوری که ملاحظه می کنید با استفاده از تزریق وابستگی به راحتی موفق شدیم از اینترفیس در کنترلر استفاده کنیم و کویری که در ریپازیتوری موجود بود را استفاده کنیم.
معماری پیازی چه تاثیری در امنیت دارد ؟
وقتی می گوییم معماری پیاز باعث امنیت بیشتر پروژه می شود منظور این نیست که اگر سورس پروژه دیکامپایل شد پروژه ما امن است!!! منظور این است که اگر افرادی قصد شنود اطلاعات را از طریق سر راه قرار گرفتن مسیرهای رد و بدل اطلاعات داشته باشند نمی توانند به راحتی به Context اصلی پروژه نزدیک شوند چون در لایه های پایینی می باشد و از این لحظه امنیت بهتری فراهم می آورد.
آیا حتما باید پروژه معماری داشته باشد؟
پروژه های کوچک خیر. اما اگر حجم و اندازه پروژه از حدی فراتر رود نیاز به داشتن یک معماری و یک اصول ضروری بنظر می رسد.
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
58
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
97
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1348
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
116
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
395
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
562
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
58
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
97
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1348
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|