رفتن به محتوای اصلی
مصطفی عفتی

درباره این پلتفرم

دفتر کاری زنده برای تجربه‌های مهندسی

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

همکار دانشجویی

  • خانم زهرا احسانی

    دانشجوی سابق · مشارکت‌کننده در توسعه پلتفرم

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

اینجا چه پیدا می‌کنید

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

با طراحی آگاهانه

  • تجربه دو‌زبانه فارسی و انگلیسی با پشتیبانی بومی از RTL.
  • رابط‌های سازگار با تم و کیبورد، با یک زبان بصری متمرکز.
  • توسعه محتوا و محصول به‌عنوان یک سیستم یکپارچه و نسخه‌بندی‌شده.

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

Contact به‌عنوان Aggregate

چرا کانال‌های تماس نباید فیلدهای مستقیم حساب کاربری باشند.
Mostafa Effati3 دقیقه مطالعهsoftware-architecture

چرا اطلاعات تماس را مستقیم روی User نگذاشتم

یک تصمیم کوچک معماری که مقیاس و نگهداری سیستم هویت را ساده‌تر می‌کند.

اسکیمای رایج این‌طور است:

User
 ├── email
 ├── phone_number
 ├── telegram
 ├── whatsapp
 └── ...

ساده به‌نظر می‌رسد — تا وقتی موجودیت User مسئولیت‌هایی را جمع می‌کند که مال او نیست.

مسئله در یک دیاگرام

آدم‌ها به‌ندرت یک ایمیل یا تلفن ابدی دارند. کانال‌ها زیاد می‌شوند؛ اپ‌ها کانال جدید اختراع می‌کنند.

فکر کردن با aggregate

به‌جای پرکردن User از کانال‌ها، یک aggregate جدا به نام Contact آوردم:

User Account
     │
     ├── Email
     ├── Mobile
     ├── Telegram
     └── WhatsApp
  • User → هویت داخل سیستم
  • Contact → چگونه به او برسید
  • هر aggregate قواعد و چرخهٔ عمر خودش را دارد

هر تماس چه چیزهایی می‌تواند داشته باشد

تأیید، رمزنگاری و اعتبارسنجی برای هر کانال فرق می‌کند. وقتی تماس‌ها first-class باشند راحت‌تر است:

مزایا

۱. گسترش‌پذیری

نوع تماس جدید → بدون migration مدل User برای هر تغییر محصول.

۲. جداسازی مسئولیت

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

۳. کنترل امنیتی بهتر

کانال‌های مختلف workflow تأیید، سیاست رمزنگاری و قواعد اعتبارسنجی متفاوت می‌خواهند.

۴. مدل واقع‌گرایانه‌تر

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

پیچیدگی تصادفی چطور رشد می‌کند

  1. روز اول

    یک ستون ایمیل. شipped.

  2. ماه سوم

    تلفن دوم. «فقط یک فیلد دیگر.»

  3. سال اول

    استثنا، null، و کانال‌های نیمه‌تأییدشده روی User.

  4. رفکتور

    Contact aggregate — همان چیزی که روز اول آرزویش را داشتید.

هدف

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

ادامه: Citizenship به‌عنوان Relationship.


نسخهٔ canonical. همچنین در Medium.

اسناد مرتبط

منوی دستور

↑ ↓برای حرکت · Enter برای انتخاب · Esc برای بستن
ناوبری
اقدامات

Esc برای بستن · ⌘K برای باز/بسته کردن