Domain-Driven Design (DDD)؛ بخش دوم: زبانی مشترک برای تیمها
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۵/۲۸ ۰۸:۱۰
آدرس: www.dntips.ir
TransferFunds پیادهسازی کند. این دو واژه، هر دو یک مفهوم را بیان میکنند. اما اگر یک توسعهدهنده دیگر از واژههایی مثل MoveMoney یا SendCash استفاده کند، در اینجا زبان مشترک شکسته میشود.Order با پراپرتیهای ژنریک، یک Aggregate Root به نام Order بسازید که متدهایی مثل AddItem() یا ConfirmShipment() داشته باشد – دقیقاً همان کلماتی که در دامنه استفاده میشود.modelBuilder.Entity<Order>().HasMany(o => o.Items).WithOne(); اما چرا متوقف شویم؟ نامگذاریها را فراگیر/مشترک کنید: به جای Items, بگویید OrderLines اگر این اصطلاح در دامنه رایج است.GetById() داشته باشید، اما بدون انعکاس دامنه، تیم بعداً گیج شود که "این Id دقیقاً به چه اشاره دارد؟" Ubiquitous Language شما را تشویق میکند تا Repositoryها را با متدهایی مثل FindPendingOrders() طراحی کنید – زبانی که مستقیماً از گفتگوهای دامنه میآید.Orders با ستون ShipmentStatus به جای چیزی مبهم مثل Stat.Bimeh به جای Insurance برای تیمی که واژه فارسی آن را به صورت روزمره استفاده میکند، کاملاً منطقی است. این کار به تیم پشتیبانی کمک میکند تا به راحتی با کدهای توسعهدهنده ارتباط برقرار کنند و بالعکس.ersal_nemooneh یا takhfif_dadan. این رویکرد، در پروژههای داخلی بسیار رایج است و اغلب کارایی بالایی دارد، زیرا هم برای برنامهنویسان قابل فهم است و هم به مفاهیم کسبوکار نزدیک است.Bimeh) استفاده شود. این کلمات هویت دامنه شما هستند.user, password, login, service), بهتر است از همان واژگان انگلیسی استفاده شود تا ابهام کاهش یابد.ErsalSample ممکن است برای برخی ابهامآمیز باشد. آیا منظور ارسال نمونه است یا چیز دیگری؟ تصمیم تیم باید بر یکی از دو الگو باشد:ersal_nemoonehsend_sampleBimeh, Moshteri, Pardakhtsabt_bimenameh, check_vaziat_sanad| حالت | توضیح |
| واژه در تعاملات روزمرهی کاربران یا پشتیبانی به همین شکل استفاده میشود | مثال: بیمه، نمونه، سازمان در گفتگوهای واقعی به همین صورت گفته میشوند |
| تیم فنی نیز همین واژه را در مکالمات استفاده میکند | وقتی کسی در جلسه میگوید «ارسال نمونه» و نه «Send Sample» |
| واژهی انگلیسی معادل یا از نظر بار معنایی دقیق نیست | مثلا “Claim” در DDD حوزه بیمه ممکن است بار خاصی داشته باشد، ولی در یک پروژه داخلی ساده «درخواست خسارت» دقیقتر فهمیده میشود |
| امکان سوءبرداشت در صورت استفاده از انگلیسی وجود دارد | گاهی «Sample» در انگلیسی برای تیم فنی به معنی نمونه کد برداشت میشود و با «نمونه آزمایشگاهی» اشتباه میشود |
| حالت | توضیح |
| دامنه دارای اصطلاحات استاندارد بینالمللی است | مثال: API، OAuth، SLA – معادل فارسی بیشتر مبهم است |
| بخشی از تیم (یا تیم آینده) با منابع انگلیسی کار میکند | مثال: توسعهدهندگانی که محصول مشابه یا داکیومنت خارجی را مطالعه میکنند |
| ترجمه فارسی نسبتاً طولانی یا نامأنوس است | مثل «برونسپاری نمونه» که بیشتر از خود «Sample Outsourcing» نامأنوستر بهنظر میرسد |
| اصطلاح در کد یا دیاگرامها زیاد تکرار میشود و نسخه فارسی/فینگلیش خوانایی را کم میکند | مثلا SazmanSpecification یا BimehPolicy طولانی و ناخوانا میشود |
| واژه | شکل استفاده در گفتگو | شکل استفاده در کد | توضیح |
| بیمه | بیمه | Bimeh | قرارداد بیمه بین مشتری و شرکت |
| سازمان | سازمان | Sazman | سازمانی که با شرکت همکاری دارد |
| نمونه | نمونه | Nemooneh | نمونه آزمایش یا مستندی که باید ارسال شود |
| ارسال نمونه | ارسال نمونه | ErsalNemooneh | روند ارسال نمونه توسط سازمان به شرکت |
| درخواست خسارت | درخواست خسارت | DamageRequest | فرم یا فرآیند درخواست جبران خسارت |
| SLA | SLA | SLA | توافقنامه سطح خدمت (واژه انگلیسی نگه داشته شده) |
| API | API | API | رابط برنامهنویسی (همان اصطلاح رایج) |
در DDD مهم نیست که واژه فارسی، انگلیسی یا فینگلیش باشد — مهم این است که واحد و بیابهام باشد و دقیقاً در گفتگوها، مستندات و کد به یک شکل استفاده شود.
ErsalNemoonehService یا حتی ارسال_نمونه داشته باشید — به شرط اینکه برای همه کاملاً قابل فهم باشد و نوسان بین “Sample” و “نمونه” پیش نیاید.