TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #364 272
📚 اصول GRASP و مثال‌های آن در OOAD

GRASP (General Responsibility Assignment Software Patterns)
مجموعه‌ای از دستورالعمل‌ها در تحلیل و طراحی شیءگرا (OOAD) هستند که به ما کمک می‌کنند مسئولیت‌ها را به کلاس‌ها و اشیا به‌صورت مؤثر تخصیص دهیم. در ادامه هر اصل را با یک مثال کاربردی بررسی می‌کنیم:

1️⃣ Creator – ایجاد کننده

مسئولیت ایجاد نمونه‌های یک کلاس را به خود کلاس یا یک کلاس کارخانه مرتبط واگذار کنید.

🔹️مثال:
در سیستم مدیریت کتابخانه، وقتی کتاب جدیدی اضافه می‌شود، یک شیء Book باید ایجاد شود. این مسئولیت می‌تواند به کلاس Library یا یک کلاس جداگانه مانند BookFactory سپرده شود تا منطق ایجاد شیء Book متمرکز و قابل مدیریت باشد.

2️⃣ Information Expert – کارشناس اطلاعات

مسئولیت را به کلاسی واگذار کنید که اطلاعات لازم برای انجام آن مسئولیت را دارد.

🔹️مثال:
هنگام امانت گرفتن کتاب، بررسی موجود بودن کتاب باید توسط کلاس Book انجام شود. کلاس Book اطلاعات وضعیت موجودی خود را دارد و می‌تواند بدون وابستگی به کلاس‌های دیگر این بررسی را انجام دهد. این کار انسجام بالا و کاهش وابستگی را تضمین می‌کند.

3️⃣ Low Coupling – وابستگی کم

کلاس‌ها باید حداقل وابستگی را به یکدیگر داشته باشند.

🔹️مثال:
در سیستم مدیریت کتابخانه، کلاس LibraryCatalog مسئول مدیریت کاتالوگ کتاب‌هاست. به جای دسترسی مستقیم به کلاس Book برای بررسی موجودی، می‌تواند از یک رابط (interface) مانند Searchable استفاده کند. این کار باعث می‌شود LibraryCatalog وابستگی کمتری به کلاس Book داشته باشد و نگهداری سیستم آسان‌تر شود.

4️⃣ High Cohesion – انسجام بالا

مسئولیت‌های درون یک کلاس باید مرتبط و متمرکز باشند.

🔹️مثال:
کلاس Book باید مسئولیت‌های مرتبط با جزئیات کتاب مانند عنوان، نویسنده و موجودی را مدیریت کند. وظایف نامرتبط مثل احراز هویت کاربر باید توسط کلاس‌های جداگانه مدیریت شوند تا هر کلاس تمرکز مشخصی داشته باشد و سیستم قابل نگهداری باشد.

5️⃣ Controller – کنترل‌کننده

مسئولیت مدیریت رویدادهای سیستم یا هماهنگی فعالیت‌ها را به یک کلاس کنترل‌کننده واگذار کنید.

🔹️مثال:
در یک اپلیکیشن وب کتابخانه، زمانی که کاربر درخواست امانت کتاب می‌دهد، کلاس BorrowBookController مسئول مدیریت درخواست و هماهنگی با کلاس‌های Book، User و Library است. این کار باعث تمرکز منطق کنترل و سازماندهی بهتر سیستم می‌شود.

6️⃣ Pure Fabrication – ساختگی خالص

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

🔹️مثال:
برای ارسال ایمیل هنگام امانت یا بازگشت کتاب، به جای افزودن منطق ایمیل به کلاس‌های Book یا User، کلاس جداگانه NotificationService ایجاد می‌کنیم. این کلاس مسئولیت خالص ارسال ایمیل را برعهده دارد و انسجام و وابستگی کم را حفظ می‌کند.

7️⃣ Indirection – واسطه‌گری

از واسطه‌ها یا انتزاع‌ها برای کاهش وابستگی کلاس‌ها و افزایش انعطاف‌پذیری طراحی استفاده کنید.

🔹️مثال:
اگر چندین کلاس نیاز به دسترسی به اطلاعات کتاب دارند، می‌توان یک رابط BookRepository معرفی کرد. کلاس‌ها به جای دسترسی مستقیم به Book، از این رابط استفاده کنند تا انعطاف‌پذیری و قابلیت تغییر آینده آسان‌تر شود.

8️⃣ Polymorphism – چندریختی

از ارث‌بری و اینترفیس‌ها برای پیاده‌سازی چندین رفتار استفاده کنید.

🔹️مثال:
فرض کنید کتاب‌ها به دو نوع FictionBook و NonFictionBook تقسیم شوند و هر کدام قوانین امانت خاص خود را داشته باشند. با تعریف یک اینترفیس مشترک Book و پیاده‌سازی آن در کلاس‌های مختلف، چندریختی اجازه می‌دهد فرآیند امانت به‌طور یکنواخت و مستقل از نوع کتاب مدیریت شود و استفاده مجدد کد ساده‌تر شود.

🔖هشتگ‌ها:
#GRASP #OOAD #ObjectOrientedDesign #LowCoupling #HighCohesion
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 →