وقتی که پروژه ای رو می خواهید شروع کنید بهترین حالت طراحی اینه که تا حد امکان بخش های مختلف پروژه مستقل از هم باشه. Service Manager در زند فریم ورک 2 قابلیتی رو برای شما فراهم میکنه تا مدیریت ماژول های مختلف یک پروژه, علاوه بر اینکه در بخشی به نام Services متمرکز میشه, باعث افزایش انعطاف پذیری پروژه هم خواهد شد. با مراجعه به مطالب قبلی که در رابطه با Dependency Injection یا تزریق وابستگی گفته شد حالا به ابزار Service Manager نیاز پیدا خواهید کرد.

گرچه الگوی Service locator pattern مشکلات خاصی رو به همراه داره اما در نهایت باعث افزایش سرعت اجرای برنامه و همینطور زیربنای استفاده از Lazy Loading  رو فراهم میکنه. در زند فریم ورک ۲ تقریبا میشه هسته اصلی زند بر اساس همین سرویس ها کار میکنه. حتی هر کنترلر موجود در پروژه در نهایت از سرویس ها استفاده میکنه. اما اینکه چطور و چرا باید ازش استفاده کنیم بگذارید مثال بزنم :‌

فرض کنید شما یک کلاس ارتباط با جدول اطلاعات کاربران(users_info) دارید,(Model) این کلاس وابسته به کلاس مربوط به جدول اصلی کاربران(users) است. حال با استفاده از کنترلری که ایجاد میکنید می خواهید اطلاعات کاربران را از پایگاه داده گرفته و در متغیری ذخیره نمایید.

دو کلاس بالا را در دو فایل مجزا تعریف نمایید. اما حتما می دانید که با این روش وابستگی زیادی بین دو کلاس به وجود خواهد آمد و مشخصا Dependency Injection را در این بخش رعایت نکرده ایم. پس اگر در آینده متد سازنده کلاس UserModel تغییر کند بایستی در تمام کلاس هایی که به UserModel وابسته هستند تغییر ایجاد شود.

اما کد زیر را در نظر بگیرید:

با این شرایط وابستگی کمتری بین دو کلاس ایجاد کردیم بنابراین توانستیم کمی تغییرات آینده را مدیریت کنیم. ما در این حالت از Dependency Injection استفاده کردیم حال برای فراخوانی کلاس UserInfoModel در هر کنترلر مانند زیر عمل میکنیم :

در کد بالا مشخص است که ما وابستگی های هر دو کلاس (یا مدل) را در کنترلر ایجاد کرده و به آنها تزریق کردیم. بنابراین در صورت تغییر هریک از وابستگی ها کد های کمتری تغییر میکند و مدیریت ساده تر می شود. اما مشکل دیگری نیز وجود دارد و آن اینکه هر جا که به UserInfoModel نیاز داشته باشیم مجبوریم این سه خط را بنویسیم. یعنی کنترلر های ما وابسته به مدل ها شده اند. و با تغییر یکی از مدل ها اجبارا بایستی در تمام کنترلر ها تغییرات حاصل شود. اینجاست که Service Manager به کمک ما می آید و راهکار خوبی برای برطرف کردن این مشکل دارد:

تابع getServiceConfig در بخش فایل اصلی ماژول در زند فریم ورک 2 استفاده می شود که در مطالب آینده به آن خواهیم پرداخت. این تابع برای ایجاد سرویس استفاده می شود. با مطالعه کد, پی خواهید برد که هر سرویس می تواند درون خود از سرویس دیگر استفاده نماید. حال در کنترلر خود با فراخوانی سرویس مربوط به UserInfoModel یک شی از کلاس مربوطه خواهیم داشت بدون آنکه درگیر وابستگی های هر یک از کلاس ها باشیم.

این روش Service Manager در زند فریم ورک 2 است. در مطلب بعدی در رابطه با انواع سرویس ها بحث خواهیم کرد.

 

 

محمد باقر رستمی

برنامه نویسی رو دوست دارم و از کارم و بیشتر از اون از یادگرفتن لذت می برم. دوست دارم از این طریق برای مردم دنیا مفید باشم. فارغ از رنگ، نژاد، ملیت و جنسیت.

Latest posts by محمد باقر رستمی (see all)

facebooktwittergoogle_pluslinkedin

دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

*