معماری پیاز در MVC

هدف اصلی معماری پیازی ، ساخت برنامه های loosely coupled و ایجاد Ceprate of concern در یک برنامه می باشد . این معماری توسعه ، تست و نگهداری کد ها را بسیار سهولت میبخشید . در این مقاله ما به بررسی این معماری خواهیم پرداخت .

معماری پیاز در MVC

در دنیای وب تعداد زیادی معمعاری وجود دارد . که هر معماری دارای مزیت ها و معایب مربوط به خود می باشد . مهم ترین مشکلی که ما در معماری های قدیمی با آنها رو به رو بودیم، نبوده Seprate of Concern و tight coupled بودن برنامه ها بود . برای مرتفع ساختن این مشکل ، معماری پیازی در سال 2008 معرفی شد . 
هدف اصلی معماری پیازی ، ساخت برنامه های loosely coupled و ایجاد Ceprate of concern در یک برنامه می باشد . این معماری توسعه ، تست و نگهداری کد ها را بسیار سهولت میبخشید .

زمانی که برای یک موجودیت یا شی مهم است که در مورد اشیا دیگر اطلاع داشته باشد یعنی به دیگران وابسته است یا به اصطلاح به آن Tight Coupled می گویند . در حالی که در Loose Coupling  ، وابستگی بین اجزا بسیاز نا چیز است . به همین دلیل این Framework مقیاس پذیر تر بوده و نگهداری و گسترش آن آسان تر است .

مروری بر معماری پیازی :


همانطور که در تصویر فوق مشاهده می فرمایید ، Domain Model در مرکز قرار دارد و آن شامل ورودی های  POCO میباشد . لایه قهوه ای دارای Serviceهای Interface می باشد . لایه سبزلایه پیاده سازی یا لایه Infrastructure می باشد . همه متد های سرویس ، Repository ها و Dependency Injection در این لایه پیاده سازی میشوند . لایه آبی UI و Testing را دارد . 

بین UI و Test و لایه Data Access هیچ وابستگی وجود ندارد که همین امر باعث بهتر شدن برنامه های MVC برای Unit Testing  می شود . پیاده سازی سرویس های برنامه در یک لایه جدا می باشد و وابستگی آن روی مرکز Domain میباشد . 

استفاده از کد :

ساختار پروژه در صورت پیاده سازی شدن معماری پیازی بصورت زیر خواهد بود . 




The Core :

Core همانند زیر خواهد بود . 



در اینجا ، یک پروژه Class library در فولدر Core وجود دارد که همانند Interface ها برای سرویس ها و Repositoryها مورد استفاده قرار میگیرد . در این جا یک Model با یک فایل Auto generated که شامل موجودیت های POCO می باشد وجود دارد .

The Infrastructure :

این فولدر شامل قسمت های اساسی برنامه می باشد . پروژه های چندگانه در این فولدر وجود دارد . اولین پروژه ، پروژه Class Library می باشد و در اینجا یک فایل edmx. در فولدر اول آن با نام data وجو دارد . همچنین این فولدر شامل یکسری فایل tt. و  کلاس های Context می باشد .

دومین پروژه ، در این فولدر dependency Injection می باشد . در این پروژه ، دو کلاس وجود دارد - یکی برای ماژول های سرویس و دیگری برای ماژول Repository .

سومین پروژه در این فولدر ، پروژه  Error Logging می باشد . این به ما در شناسایی خطا های رخ داده در پایگاه داده کمک خواهد کرد . در پروژه infrastructure ، این عملیات برای دسترسی به خارج برنامه صورت میگیرد برای مثال ، دسترسی و پردازش file System ، عملیات های dataBase و پردازش سرویس های خارجی . فعالیت های مذکور درزمان ایجاد پروژه Infrustrucure باید اعمال شوند .

1. ایجاد یک کلاس برای database Context 
2. پیاده سازی کلاس Repository
3. ایجاد یک کلاس برای database initioalizer


The WEB Project :

یک برنامه MVC ایجاد کنید که از پروژه های Infrastructure و core استفاده کند . reference های زیر باید به پروژه WEB اضافه شوند . 

1. یک reference به پروژه infrastructure اضافه کنید 
2. یک reference به پروژه core اضافه کنید 
3. یک reference به پکیج Entity FrameWork اضافه کنید .

وابستگی ها :





پروژه WEB به دو پروژه infrasturucture و Core وابستگی دارد . همانطور که در دیاگرام بالا نمایش داده شده است . پروژه infrasturucture  به پروژه Core وابسته است و پروژه Core به همه وابستگی دارد . 

ویژگی های اصلی معماری پیازی :

1. برنامه اصلی از یک model مستقل ایجاد می شود . 
2. Interface  زمانی که پیاه سازی توسط لایه های بیرونی به پایان رسید ، با لایه های درونی پیاده سازی می شود . 

یک معماری Onion ، به جدا کردن Bussiness , Infrastructure و UI بدون استفاده از ظرفیت های OOP و Domain-driven کمک شایانی میکند . 

دانلود نسخه ی PDF این مطلب