دسته بندی ها
14:29 1399/05/23

آموزش معماری پیاز در Asp.net Core

مشخصات سوال کننده :
کاربر : fateme     امتیاز کاربر : 1635     رتبه کاربر : 2
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 6990
هوش مصنوعی

پاسخ هوش مصنوعی

سلام! در ادامه به سوالات شما درباره معماری پیاز در ASP.NET Core پاسخ می دهم:

نحوه پیاده سازی صحیح این معماری در Asp.net Core:

برای پیاده سازی معماری پیاز در ASP.NET Core، شما باید پروژه تان را به چند لایه تقسیم کنید. این لایه ها معمولاً شامل موارد زیر هستند:

  • لایه دامنه (Domain Layer): شامل منطق کسب وکار و موجودیت ها.
  • لایه کاربرگانی (Application Layer): شامل منطق مربوط به برنامه و قواعد، خدمات و رابط کاربری.
  • لایه زیرساخت (Infrastructure Layer): شامل دسترسی به داده ها و دیگر سرویس های خارجی.
  • لایه UI: شامل صفحات وب و فن آوری های رابط کاربری.

در این معماری، سیستم شما به صورت دایره ای سازماندهی می شود و لایه های خارجی به لایه های داخلی دسترسی ندارند.

کمک به امنیت در پروژه:

معماری پیاز به امنیت پروژه کمک می کند زیرا لایه های داخلی (که شامل منطق کسب وکار هستند) از لایه های بیرونی (که شامل کاربرد و نمای کابری هستند) جدا شده اند. این جدایی می تواند به محافظت از منطق حساس و دسترسی به داده ها کمک کند و اطمینان حاصل کند که هر تغییر در لایه های بیرونی تاثیری بر لایه های داخلی ندارد.

تفاوت معماری پیازی و Clean Architecture:

هر دو معماری جوانب مشابهی دارند و تمرکز بر جداسازی منطق کسب وکار از دیگر لایه ها دارند. با این حال، به طور کلی:

  • معماری پیاز بیشتر بر نوع لایه ها تمرکز دارد، در حالی که Clean Architecture بر قواعدی برای چگونگی تعامل این لایه ها تأکید دارد.
  • Clean Architecture معمولاً شامل لایه های بیشتری به نام لیست ورودی ها و پورت ها است، که می تواند پیاده سازی های بیشتری را معرفی کند.

اشکالات نرم افزار بدون معماری:

بدون معماری مناسب، ممکن است نرم افزار شما دچار مشکلات زیر شود:

  • کد پیچیده و غیرقابل نگهداری.
  • عدم جداسازی منطق کسب وکار، که منجر به تداخل وظایف می شود.
  • سختی در تست واحد و یکپارچه.
  • عدم سازگاری در هنگام توسعه و مقیاس پذیری پروژه.

بنابراین، استفاده از یک معماری مناسب مثل معماری پیاز می تواند به بهبود کیفیت کد و عملکرد پروژه شما کمک کند.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 02:14 1399/05/24

برای پیاده سازی نرم افزارها معماری های مختلفی به وجود اومده که در طول زمان این معماری ها تغییراتی را داشته اند. تقریبا میشه گفت به ترتیب معماری های زیر بوده

 

  • معماری Hexagonal
  • معماری پیازی یا Onion Structure
  • معماری تمیز با Clean Architecture

این معماری های ادامه یکدیگر هستند. یعنی وقتی شما در پروژه خودتون از معماری پیازی استفاده می کنید تا حدودی معماری تمیز یا Clean Architecture هم استفاده کردید.

 

در مورد معماری تمیز یا Clean Architecture می تونید این لینک رو مطالعه کنید. در این جا میخوام بیشتر تمرکز رو روی معماری پیازی قرار بدم.

 

معماری پیازی چیست ؟

به طور کلی میشه گفت:

  • معماری پیازی بر این اساس پیاده سازی شده که همیشه دیتابیس یا Domain پروژه باید در پایینی ترین لایه نرم افزار قرار بگیره.
  • تنها Repository ها هستن که می تونن با دیتابیس ارتباط داشته باشن و کویری هایی رو روی اون اجرا کنن.
  • ریپازیتوری ها از طرفی با دیتابیس در ارتباط هستن و از طرفی با اینترفیس ها که همون لایه Service نامیده میشه. در واقع با ریپازیتوری ها هم نمیشه مستقیما کار کرد، بلکه باید از طریق لایه Service با اونها در ارتباط بود.
  • لایه UI یا کنترلرها در برنامه نویسی MVC هم از اینترفیس ها استفاده میکنه. معمولا اینترفیس ها در کنترلرها Inject یا تزریق میشن.

به ترکیب بالا معماری پیازی گفته میشه. اگر در شکل زیر نگاه کنید دقیقا متوجه میشید که چه ساختاری رو باید در پروژه خودتون پیاده سازی کنید

 

آموزش معماری پیازی

 

پیاده سازی معماری پیازی در 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 اصلی پروژه نزدیک شوند چون در لایه های پایینی می باشد و از این لحظه امنیت بهتری فراهم می آورد.

 

آیا حتما باید پروژه معماری داشته باشد؟

پروژه های کوچک خیر. اما اگر حجم و اندازه پروژه از حدی فراتر رود نیاز به داشتن یک معماری و یک اصول ضروری بنظر می رسد.

ویرایش شده در سه شنبه 16 دی 1399 ساعت 00:45:48
به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود