با ما همراه باشید تا با معماری نرم افزارهای تولید شده در رادنت آشنا باشیم
در سال ۲۰۰۸ جفری پالرمو الگوی معماری با نام معماری پیازی (Onion architecture) با ایده گرفتن از معماری شش ضلعی (Hexagonal architecture) ارائه شده توسط Alistair Cokborn معرفی کرد؛ طبق گزارش شرکت برنامه نویسی رادنت ؛ این معماری بر ۴ اصل بنا نهاده شده است:
برنامه بر روی یک Object model مستقل ایجاد می شود.
لایه های داخلی رابط (Interface) ها را تعریف می کند و لایه های بیرونی تر رابط ها را پیاده سازی می کند.
جهت اتصال به سمت لایه های مرکزی تر می باشد.
کد هسته ی برنامه ,جدایی از زیرساخت, قابل کامپایل و اجرا می باشد.
رادنت می گوید مهمترین دلیل برای ایجاد چنین معماری, نیازمندی به ساختاری است تا قابلیت نگهداری برنامه های تحت وب در دراز مدت را فراهم نماید, این نکته با رعایت اصل SOP) Separation Of Concerns) در سرتاسر سیستم بدست می آید.
این معماری برای برنامه های تحت وب ساده و کوچک اصلا مناسب نیست بلکه برای برنامه های تحت وب مرتبط با کسب و کارهای بلند مدت همراه با رفتارهای پیچیده, مناسب می باشد.این معماری بر روی استفاده از رابط هایی برای ارائه رفتارهای سیستم تاکید می کند و برون سازی زیرساخت برنامه از هسته برنامه را مورد توجه قرار می دهد.
هدف اصلی کنترل اتصالات و وابستگی ها می باشد.قاعده اساسی اینست که همه ی کد وابسته به لایه های مرکزی باشد و وابستگی به لایه های خارج از هسته ایجاد نشود. به عبارت دیگر جهت اتصالات به سمت مرکزیت هسته ی برنامه باشد, این اصل برای رادنت در تولید نرم افزارهای بزرگ خود بسیار اهمیت دارد.
مرکزی ترین لایه Domain Entities می باشد ,که رفتار و وضعیت مدل کسب و کار را نشان می دهد و فقط به خود اتصال و وابستگی دارد.
در اطراف Domain Model ,لایه هایی با رفتارهای بیشتر ایجاد می شوند ,تعداد لایه بسته به نوع برنامه متغیر است اما به یاد داشته باشید لایه Domain model مرکزی ترین لایه است و از آنجائیکه تمای اتصالات به سمت مرکز است این لایه فقط به خود متصل است.
لایه خارجی تر, لایه Repository Interface می باشد که رابط های مرتبط با ذخیره سازی و بازیابی داده ها را ارائه می دهد. رفتار مربوط به بازیابی و ذخیره سازی در هسته ی برنامه قرار ندارد چرا که این رفتار شامل پایگاه داده می باشد و در هسته ی برنامه تنها رابط ها جا داده می شوند.
لایه خارجی تر از آن , لایه ی Business Logic Interface می باشد که رابط های های مربوط به رفتار و منطق کسب کار در آن گنجانده می شود.
و Client که خارجی ترین لایه می باشد برای مسائلی است که تغییرات زیادی در آنها رخ می دهد(مثل رابط کاربری), این مسائل از هسته ی برنامه باید کاملا جدا باشند.
معماری پیازی شدیدا به مفهوم Dependency Inversion Control تکیه دارد اگر کلاسهای پیاده سازی مربوط با رابط های هسته برنامه در خارج از برنامه قرار گیرند به مکانیزمی نیاز خواهیم داشت تا کد مربوطه را در زمان اجرا به برنامه تزریق نماید.
در این معماری پایگاه داده در نقش ذخیره و بازیابی می باشد و صرفا سرویس ذخیره و بازیابی داده ها را ارائه می دهد, ارتباط بین برنامه و پایگاه داده باید از طریق کد زیرساختی خارجی ,که رابطی را جهت جداسازی اتصال بین برنامه و پایگاه داده تعریف می کند ,برقرار شود.این امر موجب کاهش هزینه ی نگهداری برنامه در دراز مدت خواهد شد.
برون سازی زیر ساخت و نوشتن کدهای سازگارگر (Adapter) بطوریکه برای زیرساخت وابستگی ایجاد نکند جزو اصول معماری شش ضلعی (Hexagonal) می باشد و معماری پیازی از این اصل استفاده می کند.
در زمان اجرا IOC Container کلاسهای مناسب را برای پیاده سازی رابط های هسته به داخل برنامه تزریق می کند. تکنولوژی های مرتبط با IOC می توان به Unity,Castle Windsor,Ninject را نام برد.