
WEBVTT

00:00.080 --> 00:00.860
خوش برگشتید.

00:00.860 --> 00:08.120
تو این ویدیو می‌خوایم در مورد dependency injection و به‌طور خاص، dependencies صحبت کنیم.

00:08.120 --> 00:15.200
dependency injection یه مفهوم خیلی قدرتمنده، مخصوصاً تو زبان‌های برنامه‌نویسی object oriented.

00:15.200 --> 00:21.830
و برای اینکه بفهمیم dependencies چی هستن و dependency injection چیه، اول باید واقعاً

00:21.830 --> 00:23.180
روی dependencies تمرکز کنیم.

00:23.210 --> 00:23.600
باشه.

00:23.600 --> 00:30.440
می‌خوایم یه مثال خیلی ساده استفاده کنیم که در مورد یه builder هست که به ابزار نیاز داره.

00:30.440 --> 00:32.930
خب dependencies چی هستن؟

00:33.200 --> 00:40.100
Dependencies به object یا component هایی اشاره داره که یه class برای عملکرد درستش نیاز داره.

00:40.100 --> 00:47.960
فکر کنید dependencies مثل ابزار یا سرویس‌های ضروری هستن که یه class برای انجام کارهاش بهشون متکیه.

00:47.960 --> 00:50.780
مثلاً تصور کنید شما یه سازنده هستید.

00:50.780 --> 00:57.680
برای ساختن یه خونه، به ابزارهای مختلفی مثل چکش، اره، میخ و چند ابزار دیگه نیاز دارید.

00:57.680 --> 01:01.550
و این ابزارها، dependencies شما هستن.

01:01.550 --> 01:07.730
حالا بیایید dependencies رو تو یه مثال عملی توی کدمون ببینیم.

01:07.730 --> 01:13.850
پس شروع می‌کنیم با یه public class به اسم hammer.

01:13.850 --> 01:15.440
خب یه hammer داریم.

01:15.440 --> 01:21.050
و یه method داخلش داریم که فقط اسمش رو می‌ذاریم use.

01:21.050 --> 01:23.180
پس باید بتونیم از hammer استفاده کنیم.

01:23.180 --> 01:26.570
وقتی این کارو کنیم، منطق hammer اتفاق می‌افته.

01:26.570 --> 01:29.000
مثلاً میخ زدن.

01:29.000 --> 01:30.320
مثال خیلی ساده.

01:30.320 --> 01:31.310
میخ می‌زنیم.

01:31.310 --> 01:32.900
Hammer برای چیه؟ برای میخ زدن.

01:32.900 --> 01:34.520
یا برای شکستن چیزی، درسته؟

01:34.520 --> 01:38.420
گاهی فقط برای شکستن چیزی هست، مثلا وقتی در حال بازسازی هستید.

01:38.420 --> 01:40.490
این Hammer ما بود.

01:40.490 --> 01:45.170
حالا بیاییم builder خودمون رو بسازیم، public class builder.

01:45.200 --> 01:45.650
خب.

01:45.650 --> 01:48.830
حالا builder ما به یه hammer نیاز داره.

01:48.830 --> 01:52.790
پس کاری که می‌کنیم اینه که یه hammer داشته باشیم.

01:52.910 --> 01:54.470
این hammer private خواهد بود.

01:54.470 --> 01:56.510
پس property یا چیز دیگه‌ای نیست.

01:56.510 --> 02:03.950
و بعد توی constructor، public builder، باید اون hammer رو ست کنیم.

02:03.950 --> 02:07.640
پس hammer یه new hammer خواهد بود.

02:07.640 --> 02:15.830
اینجا builder مسئول ایجاد dependencies خودش هست.

02:15.830 --> 02:17.600
یعنی چی؟

02:17.600 --> 02:22.910
یعنی builder مسئول آوردن hammer خودش هست.

02:22.910 --> 02:30.860
اگر builder هنگام ایجاد خودش یا شروع کار hammer خودش رو نیاورد، نمی‌تونه کار رو انجام بده.

02:30.860 --> 02:33.230
پس این همون dependency ماست.

02:33.230 --> 02:36.110
بعد می‌تونم بگم builder شروع می‌کنه به ساختن خونه و چیزی پاس نمی‌کنیم.

02:36.110 --> 02:47.030
فقط از hammer خودش استفاده می‌کنیم و بعد می‌گیم خانه ساخته شد، house built.

02:47.030 --> 02:49.430
خب واضحاً فقط hammer کافی نیست.

02:49.430 --> 02:54.620
پس چرا اره رو هم نمیاریم؟

02:54.620 --> 03:01.070
پس بیاییم یه public class saw بسازیم.

03:01.070 --> 03:05.870
اره هم یه method خواهد داشت.

03:05.870 --> 03:09.320
می‌تونید اسم method رو saw یا sawing بذارید.

03:09.320 --> 03:15.140
یا می‌تونید بگید public void use.

03:15.140 --> 03:18.110
خب.

03:18.140 --> 03:18.740
این method هم یه Console.WriteLine ساده خواهد بود.

03:18.740 --> 03:24.980
و می‌گیم sawing wood.

03:24.980 --> 03:26.990
خب.

03:27.110 --> 03:27.950
حالا builder ما نباید اره رو فراموش کنه.

03:27.950 --> 03:33.410
بیاییم ازش استفاده کنیم.

03:33.410 --> 03:35.960
حالا یه اره داریم ولی هنوز با خودمون نیاوردیم.

03:35.960 --> 03:39.620
می‌تونیم با خودمون بیاریم.

03:39.620 --> 03:41.150
چون اره‌ها وجود دارن، درسته؟

03:41.150 --> 03:43.340
به عنوان builder می‌دونیم اره‌ها وجود دارن.

03:43.340 --> 03:44.960
پس الآن می‌دونم اره وجود داره و دارم میارمش.

03:44.960 --> 03:51.290
من اره جدیدم رو میارم.

03:51.320 --> 03:52.880
البته همیشه لازم نیست اره جدید باشه، ولی باید new رو استفاده کنیم تا یه اره جدید بسازیم.

03:53.030 --> 03:56.960
حالا هر وقت builder خونه می‌سازه، می‌تونه از اره‌اش هم استفاده کنه.

03:56.960 --> 03:57.560
خب.

03:57.590 --> 04:03.440
حالا dependency کجاست؟

04:03.590 --> 04:07.070
dependency اینه که builder به hammer و saw وابسته است.

04:07.070 --> 04:13.760
پس حالا saw و hammer، dependencies برای builder هستن.

04:13.760 --> 04:21.680
همین چیزی هست که داریم می‌گیم.

04:21.920 --> 04:23.510
باشه.

04:23.510 --> 04:24.260
خب تقریباً تمام شد برای dependencies.

04:24.260 --> 04:28.310
حالا تو ویدیوی بعدی می‌بینیم dependency injection چیه.

04:28.310 --> 04:33.200
چطور dependencies رو inject می‌کنیم.

04:33.200 --> 04:35.360
پس تو ویدیوی بعدی می‌بینمتون.
```
