حسین سلمانیان
حسین سلمانیان
خواندن ۴ دقیقه·۴ سال پیش

معماری پیازی (architecture Onion )چیست؟

اغلب معماری های مورد استفاده در فرآیند تولید نرم افزار با چالش هایی در رابطه با Tight coupling یا مواردی مغایر با اصل Separation of concerns روبرو می شوند.معماری پیازی (Onion Architecture) که توسط جفری پارلمو (Jeffery Palermo) ارائه شده شرایط بهتری برای نگهداری ، سازماندهی وابستگی ها و تست یک اپلیکیشن را فراهم میکند.
اصول معماری پیازی
در معماری پیازی مانند معماری های n-tier یک نرم افزار از لایه های مختلفی تشکیل شده است، با این تفاوت که در این معماری لایه ها بصورت متحد المرکز با مرکزیت لایه هسته سیستم (Core Layer) که دامین مدل سیستم را تعریف و مشخص میکند ، مدل می شوند. در این معماری بر خلاف معماری چند لایه وابستگی به لایه دیتا وجود ندارد و تمرکز بر دامین اپلیکشن است.

لایه ها در معماری پیازی
لایه ها در معماری پیازی


مسائل و راه حل های ارائه شده
در معماری چند لایه قدیمی، ارتباط و وابستگی لایه ها از لایه رابط کاربری(User interface) به لایه بیزینس یا همان لایه قوانین و منطق های اپلیکیشن(Business layer) و از این لایه به لایه دیتا(Data Access) برقرار است، بنحوی که وابستگی بین لایه ها بشکل خیلی قوی دیده می شود و (Tight Coupling) بین لایه ها وجود دارد. بعبارت دیگر هیچکدام از دیگری مستقل نیستند. چنین وضعیتی موجب می شود که درک چنین سیستمهایی مشکل و نگهداری آنها نیز بمراتبط سخت تر وپرهزینه باشد.

در معماری پیازی برای حل این مشکل علاوه بر تعریف دامین سیستم، رفتار ها و نیازمندی های سیستم هم با استفاده از اینترفیس ها در لایه هسته سیستم (Core Layer) تعریف می شوند. البته این نوع تعریف اینترفیس ها برای معرفی کردن وابستگی ها در لایه های دیگر سیستم هم کاربرد دارد و فقط مختص به لایه Core نیست .در واقع هر لایه ای همانطور که قبلا هم گفته شد برای ارتباط با لایه های دیگر از اینترفیس ها استفاده میکند نه بصورت مستقیم از پیاده سازی انجام شده برای وابستگی ها.


لایه ها در معماری پیازی
اگر چه در این معماری نیز مفهوم لایه تعریف کننده ارتباط مفهومی اجزای تشکیل دهنده سیستم است، اما تعریف متفاوتی از معماری چند لایه (n-tier)، برای مفهموم لایه مورد بحث است.

لایه دامین(Domain layer)
در مرکز لایه های معماری پیازی لایه Core یا هسته سیستم ، لایه ای است که تعاریف بیزینس و رفتار های سیستم در آن مدل می شود. ایده اصلی این است که تمامی دامین آبجکت های اپلیکیشن در این لایه بنحوی که بدون وابستگی سخت (Hard dependency) باشند.

لایه اپلیکیشن(Application Layer)
لایه اپلیکیشن در بر گیرنده عملیاتی است که قوانین بیزینس ایجاب میکند که روی انتیتی های سیستم صورت پذیرد. بعنوان مثال عملیات ذخیره اطلاعات مشتری.سوالی که در اینجا پیش می آید این است که ذخیره اطلاعات عملیاتی است که با مکانیزم های ذخیره و بازیابی اطلاعات مرتبط است و همانطور که صحبت شد هدف از این معماری حذف وابستگی ها و از بین بردن Tight coupling است. بنابر این دیتابیس و جزییات نحوه ذخیره اطلاعات باید از قوانین بیزینس سیستم جدا باشند.

لایه ذخیره سازی(Persistence layer)
در این لایه نحوه ذخیره سازی اطلاعات سیستم ازلحاظ تکنولوژی مورد استفاده برای ارتباط با دیتابیس و نوع دیتابیس تعریف میشوند. به لایه ذخیره سازی می شود بعنوان یک پلاگین برای سیستم نگاه کرد. در حقیقت این اطلاعات است که برای سیستم ارزش دارد نه نحوه ذخیره سازی آنها. ذخیره اطلاعات می تواند به هر نحوی باشد در یک فایل متنی ،دیتابیس رابطه ای، No SQL دیتابیس و... . ارتباط بین لایه ذخیره سازی و لایه اپلیکیشن از طریق تزریق وابستگی ها با استفاده از اینترفیس های تعریف شده در لایه دامین سیستم ایجاد می شود.

لایه رابط کاربری(Presentation/User interface layer)
لایه رابط کاربری در حقیقت بیرونی ترین لایه معماری پیازی است. این لایه می تواند یک اپلیکیشن وب، یک Web API یا هر قابلیتی که امکان استفاده از بیزینس سیستم را بدهد باشد. عدم وجود وابستگی به پیاده سازی ها و استفاده از Dependency Injection باعث میشود که ارتباط با لایه های داخلی تر سیستم از طریق اینترفیس ها صورت پذیرد.

مزایا

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

محدویدیت ها و چالش ها

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


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


معماری نرم افزارمعماری پیازینرم افزارclean coding
توسعه دهنده نرم افزار
شاید از این پست‌ها خوشتان بیاید