دو تا از مهمترین مولفه هایی که Dependency Injection باعث کندی پرفورمنس توی سیستم شما و شلخته شدن معماری پروژه شما میشه اینا هستند:
1.شما در یک کلاس سرویس دوتا interface رو inject میکنید در حالی که ممکنه در بعضی از سرویس هاتون (متد هاتون) از اونا استفاده نکنید.این یعنی بخواید نخواید اون Dependency توی constructor کلاس inject خواهد شد و علاوه بر اینکه اینکار یک سربار اضافه بر روی سرویس های شماست حتی اینکه چرا از اون کلاس inject شده استفاده نمی کنید ولی اونو inject میکنید و یا در فیلد های کلاس شما هست خودش مساله هست که معماری سیستم شمارو زیر سوال میبره.بنابراین راه کار اینه که کلاسیرو inject کنید که حتما از اون توی تمامی سرویس ها استفاده میکنید یا اگر نمی کنید توابع رو در یک سرویس جداگانه بزنید که این عمل هم خودش ممکنه باعث زیاد شدن کلاس های سرویس ها به ازای هر interface ای که inject میکنید بشه.
2.به طور کلی استفاده از عملیات runtime برای instance گرفتن کلاس ها از طریق Activator.CreateInstance و روش های دیگه ی Runtime چندین برابر نسبت به عملیات کامپایل تایم کند هست.یعنی شما اگر به صورت دستی یک کلاس رو new کنید صد ها برابر سریعتر از کلاسی هست که به صورت runtime در حافظه new میشه.در Dependency Injection به طور کاملا صد در صد کلاس های سرویس شما به ازای هر بار صدا زدن توسط Activator در حافظه new میشن و همونجا هم constructor هایی که باید inject بشن هم new یا به صورت cache توی اون کلاس inject میشن نمیتونم بگم این عملیات چقدر کند هست اما وقتی این اتفاق توی بک اند کم کم اتفاق میوفته به قول معروف قطره قطره جمع شود وانگهی دریا شود، سیستم شما رو بشدت کند میکنه و شما کماکان دنبال کدهایی در ساختار خودتون برای بالا بردن پرفورمنس میگردید در حالی که مشکل از جای دیگه آب میخوره.
#CSharp
#Dependency_Injection
@CsharpTips
1.شما در یک کلاس سرویس دوتا interface رو inject میکنید در حالی که ممکنه در بعضی از سرویس هاتون (متد هاتون) از اونا استفاده نکنید.این یعنی بخواید نخواید اون Dependency توی constructor کلاس inject خواهد شد و علاوه بر اینکه اینکار یک سربار اضافه بر روی سرویس های شماست حتی اینکه چرا از اون کلاس inject شده استفاده نمی کنید ولی اونو inject میکنید و یا در فیلد های کلاس شما هست خودش مساله هست که معماری سیستم شمارو زیر سوال میبره.بنابراین راه کار اینه که کلاسیرو inject کنید که حتما از اون توی تمامی سرویس ها استفاده میکنید یا اگر نمی کنید توابع رو در یک سرویس جداگانه بزنید که این عمل هم خودش ممکنه باعث زیاد شدن کلاس های سرویس ها به ازای هر interface ای که inject میکنید بشه.
2.به طور کلی استفاده از عملیات runtime برای instance گرفتن کلاس ها از طریق Activator.CreateInstance و روش های دیگه ی Runtime چندین برابر نسبت به عملیات کامپایل تایم کند هست.یعنی شما اگر به صورت دستی یک کلاس رو new کنید صد ها برابر سریعتر از کلاسی هست که به صورت runtime در حافظه new میشه.در Dependency Injection به طور کاملا صد در صد کلاس های سرویس شما به ازای هر بار صدا زدن توسط Activator در حافظه new میشن و همونجا هم constructor هایی که باید inject بشن هم new یا به صورت cache توی اون کلاس inject میشن نمیتونم بگم این عملیات چقدر کند هست اما وقتی این اتفاق توی بک اند کم کم اتفاق میوفته به قول معروف قطره قطره جمع شود وانگهی دریا شود، سیستم شما رو بشدت کند میکنه و شما کماکان دنبال کدهایی در ساختار خودتون برای بالا بردن پرفورمنس میگردید در حالی که مشکل از جای دیگه آب میخوره.
#CSharp
#Dependency_Injection
@CsharpTips