رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
service locator (حل شد)
#1
سلام دوستان لطفا یک از دوستان که اطلاعات خوبی راجعبه service locator در yii2 داره یکم توضیح بده با چند تا مثال برای موارد استفادش تا ما هم فیض ببریم. توی این لینک یه چیزایی گفتن ولی من که نفهمیدم : http://www.yiiframework.com/doc-2.0/guid...cator.html
ممنون
پاسخ
تشکر شده توسط:
#2
توضیحاتش که خیلی واضحه. کجاش رو متوجه نشدین؟
پاسخ
تشکر شده توسط:
#3
فرقش دقیقا با کامپوننت چیه؟ یعنی چیزی که من فهمیدم اینه که میگه yii::$app یه سرویس لوکیتور هست. که یک سری کامپوننت داره، خوب چطوری یه سرویس لوکیتور دیگه تعریف کنم. یک مثال خوب میخواهم واسه درک بهتر کاربردش توی پروژه.
الان چیزی که من فهمیدم از تعریف سرویس لوکیتور: "یک شی که یک سری کامپوننت رو نگه میداره تا موقع نیاز درخواستشون کنیم" درسته؟
پاسخ
تشکر شده توسط:
#4
خیلی فرق دارن. کامپوننت خودش کارهای لازم رو انجام میده ولی ServiceLocator مخزن نگهداری سرویسهای دیگه است که یکی از اونها میتونه کامپوننت هم باشه. مثال زیر رو درنظر بگیرین:
use yii\di\ServiceLocator;
use yii\caching\FileCache;

$locator = new ServiceLocator;

// register "cache" using a class name that can be used to create a component
$locator->set('cache', 'yii\caching\ApcCache');

// register "db" using a configuration array that can be used to create a component
$locator->set('db', [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=demo',
    'username' => 'root',
    'password' => '',
]);

// register "search" using an anonymous function that builds a component
$locator->set('search', function () {
    return new app\components\SolrService;
});

// register "pageCache" using a component
$locator->set('pageCache', new FileCache);

نحوه استفاده:
$cache = $locator->get('cache');
// or alternatively
$cache = $locator->cache;
توی مثال بالا، خیلی واضح اومده توی سرویس لوکیتور یه سری عنصر اضافه کرده و بعد ازشون استفاده کرده. اگه جایی ابهام بود در خدمتم.
پاسخ
تشکر شده توسط:
#5
میتونید کلاس اختصاصی خودتون رو از این کلاس مشتق کنید و عناصر رو بهش اضافه کنید و هرجا خواستین فقط یه شئ ازش بسازین و به عناصر داخلش دسترسی پیدا کنید.
پاسخ
تشکر شده توسط:
#6
این رو متوجه شدم و نحوه کار کردش رو هم میدونم.
ابهام این جا هست که خوب ما کامپوننت رو در کانفیگ اپلیکیشن ست میکنیم دیگه چه نیازی هست که بیایم سرویس لوکیتور بسازیم. اصلا فلسفه وجودش چیه؟
پاسخ
تشکر شده توسط:
#7
نیازی نیست
درو اقع 2 روش متفاوت هستند و هردو دارند یه کار رو انجام میدند.
فلسفه وجودیش هم Inversion of Control هست.
درواقع Service Locator یه منطقی هست
برای سازماندهی و مرتب سازی و مدیریت سرویس ها بصورت مرکزی

- قالبیت توسعه
ممکنه شما بخوایید یه کامپونت یا اکستنشن که یه سرویس رو ارایه میده رو کانفیگ کنید با اینکه با کامپونت یا اکستنشنی که توسط شما توسعه داده شده ویا کتابخانه های جانبی non-Yii 3rd-party library جایگزین کنید.
برای مثال میتونیدurlManager توسعه داده شده توسط خودتون یا یه non-Yii 3rd-partylibrary که میتونه از urlManager پایه مشتق شده باشه یا نه، جایگزین urlManager پایه کنید بدون خونریزی یا درد...

یادگیری مداوم حداقل شرط لازم برای موفقیت در هر زمینه ای است که در آن فعالیت می کنید؛ هر روز چیز جدیدی بیاموزید.
پاسخ
تشکر شده توسط: hooman.pro




کاربران در حال بازدید این موضوع: 1 مهمان