Facebook Pixel
Searching...
فارسی
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Dependency Injection in .NET

Dependency Injection in .NET

توسط Mark Seemann 2011 584 صفحات
4.42
500+ امتیازها
گوش دادن

نکات کلیدی

1. تزریق وابستگی امکان جداسازی ضعیف برای کد قابل نگهداری را فراهم می‌کند

تزریق وابستگی مجموعه‌ای از اصول و الگوهای طراحی نرم‌افزار است که به ما امکان می‌دهد کدی با جداسازی ضعیف توسعه دهیم.

مزایای جداسازی ضعیف. تزریق وابستگی (DI) طراحی ماژولار را با کاهش وابستگی‌ها بین اجزا ترویج می‌دهد. این امر منجر به چندین مزیت می‌شود:

  • بهبود قابلیت نگهداری: تغییرات در یک ماژول تأثیر کمی بر دیگران دارد
  • افزایش قابلیت تست: اجزا به راحتی برای تست واحد قابل جداسازی هستند
  • انعطاف‌پذیری بیشتر: پیاده‌سازی‌ها می‌توانند بدون تغییر مصرف‌کنندگان جایگزین شوند
  • توسعه موازی: تیم‌ها می‌توانند به طور همزمان روی ماژول‌های مختلف کار کنند

DI این کار را با معکوس کردن کنترل وابستگی‌ها انجام می‌دهد. به جای اینکه اجزا وابستگی‌های خود را ایجاد کنند، آن‌ها را از منابع خارجی دریافت می‌کنند. این جداسازی نگرانی‌ها به معماری‌های نرم‌افزاری انعطاف‌پذیرتر و قابل تطبیق‌تر منجر می‌شود.

2. اصول SOLID راهنمای طراحی مؤثر شیءگرا هستند

به یک رابط برنامه‌نویسی کنید، نه به یک پیاده‌سازی.

توضیح SOLID. اصول SOLID پایه‌ای برای ایجاد سیستم‌های شیءگرای قابل نگهداری فراهم می‌کنند:

  • اصل مسئولیت واحد: یک کلاس باید تنها یک دلیل برای تغییر داشته باشد
  • اصل باز/بسته: کلاس‌ها باید برای توسعه باز و برای تغییر بسته باشند
  • اصل جایگزینی لیسکوف: زیرنوع‌ها باید قابل جایگزینی با نوع‌های پایه خود باشند
  • اصل جداسازی رابط: رابط‌های خاص مشتری بهتر از یک رابط عمومی هستند
  • اصل معکوس‌سازی وابستگی: به انتزاعات وابسته باشید، نه به پیاده‌سازی‌ها

این اصول با هم کار می‌کنند تا سیستم‌هایی با جداسازی ضعیف و انسجام بالا ایجاد کنند. آن‌ها به توسعه‌دهندگان در ایجاد طراحی‌های انعطاف‌پذیر که به راحتی می‌توانند تغییر و رشد را در طول زمان بپذیرند، راهنمایی می‌کنند. با رعایت SOLID، پایه‌ای محکم برای پیاده‌سازی مؤثر تزریق وابستگی ایجاد می‌کنید.

3. تزریق سازنده روش ترجیحی برای پیاده‌سازی DI است

تزریق سازنده باید انتخاب پیش‌فرض شما برای DI باشد.

مزایای تزریق سازنده.

  • اطمینان از در دسترس بودن وابستگی‌ها بلافاصله پس از ایجاد شیء
  • آشکار کردن وابستگی‌ها در API عمومی کلاس
  • پشتیبانی از تغییرناپذیری با اجازه دادن به فیلدهای فقط خواندنی
  • کارکرد خوب با کانتینرهای DI و تسهیل تست آسان‌تر

تزریق سازنده شامل ارسال وابستگی‌ها به عنوان پارامتر به سازنده یک کلاس است. این روش نسبت به روش‌های دیگر تزریق مانند تزریق ویژگی یا تزریق روش مزایای زیادی دارد. این تضمین می‌کند که یک شیء در حالت معتبر است به محض اینکه ساخته شد، و از استفاده از شیء قبل از تنظیم تمام وابستگی‌های آن جلوگیری می‌کند. علاوه بر این، وابستگی‌های کلاس را برای مصرف‌کنندگان واضح می‌کند و خوانایی و قابلیت نگهداری کد را بهبود می‌بخشد.

4. ریشه ترکیب، ایجاد نمودار شیء را متمرکز می‌کند

ریشه ترکیب مکانی (ترجیحاً) منحصر به فرد در یک برنامه است که در آن ماژول‌ها با هم ترکیب می‌شوند.

پیاده‌سازی ریشه ترکیب. الگوی ریشه ترکیب به مکان و چگونگی ترکیب نمودارهای شیء می‌پردازد:

  • در نزدیکی نقطه ورود برنامه قرار دارد
  • تمام منطق ترکیب شیء را متمرکز می‌کند
  • ایجاد شیء را از استفاده از شیء جدا می‌کند
  • تسهیل تغییرات پیکربندی و تست آسان‌تر

با متمرکز کردن ترکیب شیء، الگوی ریشه ترکیب مدیریت وابستگی را ساده می‌کند و تغییر پیاده‌سازی‌ها یا پیکربندی‌ها را بدون تأثیر بر بقیه برنامه آسان‌تر می‌کند. این جداسازی نگرانی‌ها به اکثر کدها اجازه می‌دهد تا بر منطق کسب‌وکار تمرکز کنند نه بر ایجاد و سیم‌کشی شیء.

5. کانتینرهای DI مدیریت وابستگی را ساده می‌کنند

یک کانتینر DI کتابخانه‌ای است که می‌تواند بسیاری از وظایف مربوط به ترکیب اشیاء و مدیریت طول عمر آن‌ها را خودکار کند.

مزایای کانتینر DI. در حالی که برای پیاده‌سازی DI ضروری نیستند، کانتینرها چندین مزیت ارائه می‌دهند:

  • خودکار کردن ترکیب نمودار شیء
  • مدیریت طول عمر شیء (مثلاً تک‌نمونه، گذرا، در هر درخواست)
  • پشتیبانی از پیکربندی اعلامی (XML، کد، یا مبتنی بر قرارداد)
  • تسهیل تست آسان‌تر و جایگزینی شیء شبیه‌سازی شده
  • اغلب ویژگی‌های اضافی مانند رهگیری و برنامه‌نویسی جنبه‌گرا ارائه می‌دهند

کانتینرهای DI وظیفه پیچیده ایجاد و مدیریت نمودارهای شیء بر اساس قوانین پیکربندی شده را بر عهده دارند. این خودکارسازی کد تکراری را کاهش می‌دهد و به توسعه‌دهندگان اجازه می‌دهد تا بر منطق کسب‌وکار تمرکز کنند نه بر مدیریت وابستگی. با این حال، مهم است که از کانتینرها به طور معقول استفاده کنید و اجازه ندهید که به یک تکیه‌گاه منجر به الگوهای ضد سرویس‌یاب تبدیل شوند.

6. مدیریت صحیح طول عمر از نشت منابع جلوگیری می‌کند

DI به ما فرصتی می‌دهد تا وابستگی‌ها را به صورت یکنواخت مدیریت کنیم.

استراتژی‌های مدیریت طول عمر. اجزای مختلف ممکن است به رویکردهای مختلف مدیریت طول عمر نیاز داشته باشند:

  • تک‌نمونه: یک نمونه برای کل طول عمر برنامه
  • گذرا: ایجاد نمونه جدید برای هر درخواست
  • در هر درخواست (برنامه‌های وب): یک نمونه در هر درخواست HTTP
  • استفاده مجدد: استفاده مجدد از نمونه‌ها از یک استخر پیش‌پیکربندی شده

مدیریت صحیح طول عمر برای جلوگیری از نشت منابع و اطمینان از عملکرد بهینه بسیار مهم است. کانتینرهای DI اغلب پشتیبانی داخلی برای استراتژی‌های مختلف طول عمر ارائه می‌دهند و این جنبه از مدیریت وابستگی را ساده می‌کنند. مهم است که ویژگی‌های ایمنی رشته و استفاده از منابع اجزا را هنگام انتخاب استراتژی‌های طول عمر مناسب در نظر بگیرید.

7. الگوهای ضدی که باید هنگام پیاده‌سازی تزریق وابستگی از آن‌ها اجتناب کرد

یک چرخه وابستگی بوی طراحی است. اگر یکی ظاهر شد، باید به طور جدی طراحی خود را بازنگری کنید.

الگوهای ضد DI رایج. آگاهی از این مشکلات به ایجاد طراحی‌های بهتر کمک می‌کند:

  • کنترل‌گر: کلاس وابستگی‌های خود را ایجاد می‌کند به جای اینکه آن‌ها را بپذیرد
  • سرویس‌یاب: استفاده از یک سرویس‌یاب به جای DI مناسب
  • ساخت محدود: نیاز به سازنده‌های خاص برای تمام وابستگی‌ها
  • تزریق نادرست: ترکیب DI با ایجاد مستقیم وابستگی‌ها

اجتناب از این الگوهای ضد برای بهره‌برداری کامل از مزایای تزریق وابستگی بسیار مهم است. آن‌ها اغلب نشان‌دهنده سوءتفاهم از اصول DI یا تلاش برای تطبیق DI بر روی یک طراحی به شدت متصل هستند. شناسایی و بازسازی این الگوها به کدی قابل نگهداری‌تر و انعطاف‌پذیرتر منجر می‌شود.

8. استراتژی‌های بازسازی برای معرفی DI به کد موجود

بازسازی به خدمات فاساد بیش از یک ترفند مهمانی برای خلاص شدن از وابستگی‌های زیاد است.

تکنیک‌های بازسازی. معرفی DI به کد قدیمی نیاز به بازسازی دقیق دارد:

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

بازسازی کد موجود برای استفاده از DI می‌تواند چالش‌برانگیز باشد اما مزایای بلندمدت قابل توجهی ارائه می‌دهد. این اغلب یک فرآیند تدریجی است که با مشکل‌سازترین یا به طور مکرر تغییر یافته‌ترین مناطق کد شروع می‌شود. استفاده از ابزارهای بازسازی خودکار و حفظ یک مجموعه تست جامع به اطمینان از ایمنی این تغییرات کمک می‌کند.

9. تکنیک‌های خاص چارچوب برای اعمال DI

از یک کانتینر DI مناسب استفاده کنید به جای توسعه کد ردیابی طول عمر خود.

یکپارچه‌سازی چارچوب. چارچوب‌های مختلف به رویکردهای خاصی برای یکپارچه‌سازی DI نیاز دارند:

  • ASP.NET MVC: پیاده‌سازی کارخانه‌های کنترل‌کننده سفارشی
  • WCF: استفاده از پیاده‌سازی‌های سفارشی ServiceHostFactory و IInstanceProvider
  • WPF: بازنویسی Application.OnStartup برای ترکیب
  • برنامه‌های کنسول: ترکیب نمودارهای شیء در روش Main

هر چارچوب چرخه حیات و مدل ترکیب خود را دارد و نیاز به رویکردهای متناسب برای پیاده‌سازی مؤثر DI دارد. درک این تفاوت‌های خاص چارچوب برای یکپارچه‌سازی بی‌نقص DI در انواع مختلف برنامه‌ها بسیار مهم است. بسیاری از کانتینرهای DI افزونه‌ها یا یکپارچه‌سازی‌های خاص چارچوب ارائه می‌دهند تا این فرآیند را ساده کنند.

10. مفاهیم پیشرفته DI: رهگیری و برنامه‌نویسی جنبه‌گرا

رهگیری یک کاربرد از الگوی طراحی دکوراتور است.

تکنیک‌های پیشرفته DI. فراتر از مدیریت وابستگی پایه، DI پارادایم‌های برنامه‌نویسی قدرتمندی را امکان‌پذیر می‌کند:

  • رهگیری: تغییر یا بهبود رفتار اشیاء بدون تغییر کد آن‌ها
  • دکوراتورها: افزودن مسئولیت‌ها به اشیاء به صورت پویا
  • پروکسی‌ها: کنترل دسترسی به اشیاء
  • برنامه‌نویسی جنبه‌گرا (AOP): ماژولار کردن نگرانی‌های متقاطع

این تکنیک‌های پیشرفته امکان ترکیب و تغییر رفتار قدرتمند بدون تغییر کد موجود را فراهم می‌کنند. آن‌ها به ویژه برای پیاده‌سازی نگرانی‌های متقاطع مانند لاگ‌گیری، کش، یا امنیت مفید هستند. بسیاری از کانتینرهای DI پشتیبانی داخلی برای رهگیری و AOP ارائه می‌دهند و قابلیت‌های DI را فراتر از ترکیب ساده شیء گسترش می‌دهند.

آخرین به‌روزرسانی::

نقد و بررسی

4.42 از 5
میانگین از 500+ امتیازات از Goodreads و Amazon.

کتاب تزریق وابستگی در .NET به خاطر پوشش جامع اصول و شیوه‌های تزریق وابستگی، تحسین‌های زیادی را به خود جلب کرده است. خوانندگان از بینش‌های آن در زمینه برنامه‌نویسی شیءگرا، اصول SOLID و الگوهای طراحی قدردانی می‌کنند. بسیاری این کتاب را برای توسعه‌دهندگان ضروری می‌دانند و به توضیحات واضح و مثال‌های عملی آن اشاره می‌کنند. این کتاب به خاطر عمق، ساختار و ارتباطش فراتر از صرفاً تزریق وابستگی مورد ستایش قرار گرفته است. برخی از خوانندگان آن را طولانی می‌یابند، اما بیشتر آن‌ها بر این باورند که این کتاب منبعی ارزشمند برای بهبود طراحی نرم‌افزار و قابلیت نگهداری در توسعه .NET است.

درباره نویسنده

مارک سیمن یک کارشناس برجسته در زمینه توسعه نرم‌افزار و نویسنده‌ای شناخته‌شده است. او به‌ویژه به خاطر کارهایش در زمینه تزریق وابستگی و اصول طراحی نرم‌افزار معروف است. سیمن با نوشتن و توسعه ابزارهایی مانند AutoFixture به‌طور قابل توجهی به این حوزه کمک کرده است. تخصص او فراتر از تزریق وابستگی است و موضوعات گسترده‌تری در برنامه‌نویسی شیءگرا و معماری نرم‌افزار را در بر می‌گیرد. رویکرد سیمن ترکیبی از دانش نظری و کاربرد عملی است که مفاهیم پیچیده را برای توسعه‌دهندگان قابل‌فهم می‌سازد. کارهای او تأثیر زیادی بر جامعه توسعه نرم‌افزار داشته است، به‌ویژه برای کسانی که با فناوری‌های .NET کار می‌کنند. سیمن به خاطر توانایی‌اش در توضیح مفاهیم فنی پیچیده با استفاده از تشبیهات قابل‌درک و مثال‌های روشن شناخته می‌شود.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
Unlock Unlimited Listening
🎧 Listen while you drive, walk, run errands, or do other activities
2.8x more books Listening Reading
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Jan 25,
cancel anytime before.
Compare Features Free Pro
Read full text summaries
Summaries are free to read for everyone
Listen to summaries
12,000+ hours of audio
Unlimited Bookmarks
Free users are limited to 10
Unlimited History
Free users are limited to 10
What our users say
30,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Settings
Appearance
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →