TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #366 282
استفاده از Static class یا Singleton ؟ یا می‌توان بهتر عمل کرد؟ 🤔

وقتی می‌خواستم به شخصی در مورد این سؤال مشاوره بدهم، احساس دوگانگی عجیبی داشتم.

دو گزینه‌ای که او مطرح کرده بود این‌ها بودند:

1️⃣ استفاده از یک کلاس استاتیک برای اتصال به پایگاه داده

2️⃣ استفاده از یک سینگلتون برای اتصال به پایگاه داده

واقعیت این است که من هیچ‌کدام از این دو گزینه را واقعاً دوست ندارم... اما می‌خواستم شرایط مطرح‌شده را در نظر بگیرم. به نظر می‌رسید این پروژه، از آن دسته اپلیکیشن‌هایی نبود که نیاز به مقیاس‌پذیری داشته باشد؛ بیشتر شبیه یک پروژه سرگرمی یا چیزی با چرخه توسعه کوتاه‌مدت بود.

این موضوع برای من همیشه کمی سخت است که با آن کنار بیایم، چون معمولاً سعی می‌کنم سیستم‌ها را طوری طراحی کنم که قابل توسعه و ماندگار باشند. اما این محدودیت‌ها وجود داشت و این هم تنها گزینه‌های مطرح‌شده بودند.

در این شرایط، من سینگلتون را انتخاب می‌کنم — و حتی نوشتن این جمله هم برایم کمی ناخوشایند است 😅

حقیقت این است که استفاده از یک کلاس استاتیک برای چیزی که حالت (State) دارد، می‌تواند خیلی راحت منجر به بروز باگ شود؛ چون عملاً هیچ کنترلی بر اینکه چه کسی می‌تواند به آن کلاس دسترسی داشته باشد، ندارید.
در مورد سینگلتون هم می‌توان همین استدلال را مطرح کرد، اما نکته‌ای که می‌خواهم اضافه کنم این است که سینگلتون ذاتاً نیازی ندارد که از همه‌جا قابل دسترسی باشد… فقط اغلب به این شکل پیاده‌سازی می‌شود.

هدف از سینگلتون این است که اطمینان حاصل کنیم بیش از یک نمونه از یک شئ ساخته نمی‌شود. اما برای رسیدن به این هدف معمولاً به این معنی است که آن شئ از همه‌جا «قابل دیدن» خواهد بود… معمولاً همین‌طور است.

به نظر من، شروع با سینگلتون به شما یک نمونه (Instance) می‌دهد که می‌توانید دسترسی به آن را به‌تدریج محدود کنید. می‌توانید شروع کنید به ارسال آن از طریق سازنده‌ها (Constructors). می‌توانید کم‌کم از تکیه به ویژگی سراسری (Global Instance Property) فاصله بگیرید.

در واقع، این کار یک قدم شما را به سمت طراحی بهتر نزدیک‌تر می‌کند؛ یعنی جایی که در ابتدای برنامه، یک نمونه از شئ می‌سازید و آن را به قسمت‌های مختلف پاس می‌دهید. خوشبختانه بسیاری از فریم‌ورک‌های تزریق وابستگی (Dependency Injection) این روند را برای ما بسیار خوب مدیریت می‌کنند.

پس در نهایت، هیچ‌کدام از این دو گزینه انتخاب مورد علاقه من نیستند، اما سینگلتون به‌نظر من «شرّ کمتر» است (هرچند خیلی جزئی!) و ما را کمی به سمت الگوهای طراحی‌ای که ترجیح می‌دهم، پیش می‌برد.
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →