Skip to content

OmidHaqi/software-engineering-notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Software Engineering Notes

Persian notes on software engineering, architecture, system design, and software development patterns for clearer and deeper understanding.

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

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

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

چرا فارسی؟

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

به همین دلیل محتوای این ریپو به فارسی منتشر می‌شود تا مفاهیم پیچیده‌تر، روشن‌تر و قابل فهم‌تر منتقل شوند. در کنار اصطلاحات فارسی، معمولاً عبارت انگلیسی اصلی هم آورده می‌شود تا ارتباط با منابع اصلی حفظ شود.

مخاطب این ریپو

این یادداشت‌ها بیشتر برای افرادی مناسب است که با برنامه‌نویسی و توسعه نرم‌افزار آشنا هستند و می‌خواهند درک عمیق‌تری از طراحی، معماری و تصمیم‌های مهندسی پیدا کنند.

مخاطب اصلی این ریپو:

  • توسعه‌دهندگان سطح متوسط
  • توسعه‌دهندگان ارشد
  • معماران نرم‌افزار
  • علاقه‌مندان به طراحی سیستم
  • افرادی که درگیر تحلیل، طراحی و پیاده‌سازی سیستم‌های واقعی هستند
  • کسانی که می‌خواهند مفاهیم نرم‌افزاری را فراتر از syntax و framework دنبال کنند

رویکرد محتوا

در هر مبحث تلاش می‌شود فقط به تعریف بسنده نشود. هر فصل تا حد امکان به این سؤال‌ها پاسخ می‌دهد:

  • مسئله اصلی چیست؟
  • این مفهوم چرا به وجود آمده؟
  • چه زمانی استفاده از آن منطقی است؟
  • چه زمانی استفاده از آن باعث پیچیدگی بی‌دلیل می‌شود؟
  • در پروژه واقعی چه شکلی پیدا می‌کند؟
  • چه اشتباهات رایجی در استفاده از آن وجود دارد؟
  • ارتباط آن با سایر مفاهیم مهندسی نرم‌افزار چیست؟

در متن اصلی فصل‌ها، نمونه‌ها تا حد امکان به‌صورت pseudo-code نوشته می‌شوند تا تمرکز روی مفهوم بماند، نه روی syntax یک زبان یا framework خاص.

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

دسترسی سریع

برای پیدا کردن سریع‌تر مسیر مطالعه، می‌توانید از بخش‌های زیر شروع کنید.

موضوع توضیح وضعیت
Domain-Driven Design مدل‌سازی دامنه، زبان مشترک، مرزبندی سیستم و الگوهای پیاده‌سازی DDD در حال تدوین
Software Architecture معماری نرم‌افزار، ساختاردهی سیستم، لایه‌بندی و مرزبندی مسئولیت‌ها به‌زودی
System Design طراحی سیستم‌های مقیاس‌پذیر، قابل نگهداری و قابل توسعه به‌زودی
Design Patterns الگوهای رایج طراحی نرم‌افزار و کاربرد درست آن‌ها به‌زودی
Clean Architecture جداسازی وابستگی‌ها، لایه‌ها و قوانین اصلی معماری تمیز به‌زودی
Testing Strategies استراتژی‌های تست، تست واحد، تست یکپارچگی و تست end-to-end به‌زودی
Distributed Systems مفاهیم سیستم‌های توزیع‌شده، ارتباط سرویس‌ها و چالش‌های عملیاتی به‌زودی
Event-Driven Architecture طراحی سیستم‌های مبتنی بر رویداد، پیام‌رسانی و هماهنگی بین سرویس‌ها به‌زودی
Microservices طراحی، مرزبندی و چالش‌های معماری میکروسرویس به‌زودی
Modular Monolith ساختاردهی سیستم‌های ماژولار بدون پیچیدگی‌های غیرضروری میکروسرویس به‌زودی
Vertical Slice Architecture طراحی قابلیت‌ها به‌صورت عمودی و مستقل از لایه‌بندی سنتی به‌زودی

مسیر فعلی محتوا

اولین مسیر محتوایی این ریپو با Domain-Driven Design یا DDD شروع می‌شود.

DDD نقطه شروع خوبی برای ورود به مباحث عمیق‌تر مهندسی نرم‌افزار است، چون قبل از صحبت درباره کد، دیتابیس، فریم‌ورک و معماری، روی فهم مسئله، زبان مشترک، مدل‌سازی دامنه و مرزبندی سیستم تمرکز می‌کند.

در بخش DDD به مرور درباره موضوعاتی مثل موارد زیر نوشته می‌شود:

  • Domain و Subdomain
  • Core Domain
  • Generic Subdomain
  • Supporting Subdomain
  • Ubiquitous Language
  • Bounded Context
  • Context Map
  • Transaction Script
  • Active Record
  • Entity
  • Value Object
  • Aggregate
  • Domain Service
  • Domain Event
  • Event Sourcing
  • Event Storming
  • Domain Storytelling
  • ارتباط DDD با معماری نرم‌افزار، Microservice و Event-Driven Architecture

مسیر پیشنهادی مطالعه

اگر تازه می‌خواهید وارد مباحث عمیق‌تر مهندسی نرم‌افزار شوید، مسیر پیشنهادی فعلی این است:

  1. شروع با Domain-Driven Design
  2. آشنایی با Domain و Subdomain
  3. آشنایی با Ubiquitous Language
  4. آشنایی با Bounded Context
  5. بررسی Context Map
  6. ورود به الگوهای ساده پیاده‌سازی مثل Transaction Script و Active Record
  7. آشنایی با الگوهای پیاده‌سازی دامنه مثل Entity، Value Object، Aggregate و Domain Event
  8. حرکت به سمت معماری نرم‌افزار، سیستم‌های توزیع‌شده و الگوهای ارتباطی

موضوعات آینده

به مرور، موضوعات دیگری هم به این ریپو اضافه می‌شوند؛ از جمله:

  • Software Architecture
  • System Design
  • Design Patterns
  • Clean Architecture
  • Testing Strategies
  • Distributed Systems
  • Event-Driven Architecture
  • Refactoring
  • Code Quality
  • Engineering Practices
  • Vertical Slice Architecture
  • Modular Monolith
  • Microservices

وضعیت محتوا

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

مشارکت

اگر پیشنهادی برای اصلاح، تکمیل یا شفاف‌تر شدن مطالب وجود داشته باشد، می‌توان از طریق Issue یا Pull Request آن را مطرح کرد.

مجوز

محتوای آموزشی این ریپو تحت مجوز Creative Commons Attribution 4.0 International (CC BY 4.0) منتشر می‌شود.

استفاده، بازنشر، ترجمه، تغییر و اقتباس از مطالب این ریپو آزاد است؛ به شرطی که به منبع اصلی ارجاع داده شود و لینک این ریپو حفظ شود.

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

::: ​​

About

Persian notes on software engineering, architecture, system design, and software development patterns for clearer and deeper understanding.

Topics

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Contributors