دسته بندی ها
05:58 1400/03/04

مفهوم Value Object چیست ؟

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : سی شارپ سی

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 5559
پاسخ دهنده : fateme 04:50 1400/03/05

مفهوم Value Object چیست ؟

آشنایی با مفهوم Value object

 

خب ببینید شما با یک جستجوی ساده در گوگل می تونید مقالات زیادی رو در مورد مفهوم Value Object پیدا کنید. اما من می خوام طبق تجربه شخصی خودم و به صورت خیلی ساده این مفهوم رو براتون شرح بدم.

 

اول اینکه معمولا Value Object ها در معماری های بزرگی مثل معماری Domain Driven Desgin استفاده می شوند.

اجازه بدید یک مثال رو به صورت خیلی ساده براتون شرح بدم. فرض کنید قصد دارید برای یک بازی شطرنج برنامه نویسی کنید. خب در بازی شطرنج مهره ها نقش کلیدی دارند. هر مهره حرکات خاصی را می تواند انجام دهد. به عنوان مثال یک سرباز می تواند یک یا دو خانه جلو برود. یا مهره فیل می تواند به صورت مورب در خانه های سیاه یا سفید حرکت کند یا اینکه مهره اسب می تواند حرکت L (ال) مانند داشته باشد.

آموزش کار با value object ها

در واقع مهره های بازی شطرنج می توانند حرکات ثابتی را داشته باشند. یعنی اگر به شما بگویند مهره ای که فقط می تواند یک یا دو خانه به جلو حرکت کند کدام مهره است ؟ می توانید به راحتی بگویید مهره سرباز است.

خب مثال بالا را در نظر داشته باشید تا در ادامه بهتر به مفهوم Value Object بپردازیم.

 

Value Object چیست ؟

از Value Object ها برای نگهداری اطلاعات ثابت یک شی استفاده می شود. این اطلاعات در نهایت باید منجر به شناسایی شی شود. به عنوان مثال فرض کنید یک کاربر داریم با نام و نام خانوادگی و آی دی منحصر بفرد و آدرس. خب در اینجا توسط ID میتوان کاربر را شناسایی کرد ولی ID هیچ گاه جزو Value Object ها حساب نمی شود. در اینجا میتوانیم بگوییم کاربری که در استان فارس، شهر شیراز، خیابان ملاصدرا، کوچه شماره 8 و پلاک 5 می باشد همان علی است. خب آدرس در اینجا یک Value Object می باشد.

یا در مثال شطرنج می توانیم بگوییم مهره ای که دو خانه به جلو می رود و سپس به سمت چپ یا راست حرکت می کند همان اسب می باشد. بنابراین حرکات مهره های شطرنج Value Object می باشند.

خب وقتی ما برای حرکات مهره ها Value Object تعریف کردیم به راحتی می توانیم میلیون ها و یا میلیاردها حالات مختلف حرکت مهره های شطرنج را کنترل کنیم. مثلا پروژه از این پس می داند که مهره سرباز یک یا دو خانه به جلو حرکت می کند.

 

خصوصیات مهم Value Object ها چیست ؟

برای تعریف Value Object ها باید توجه کنید که یک سری قواعد و مشخصه هایی وجود دارد. از جمله :

  • شناسه یا ID ندارند. در واقع در مثال شطرنج ما نمی توانیم بگوییم آی دی 2 سرباز است و آی دی 3 اسب. اشیا توسط خصوصیات آنها شناسایی می شود.
  • به مقدار وابسته هستند. همچنین مقایسه دو Value Object توسط مقادیر انجام می شود. مثلا در مقایسه دو آدرس شهر و خیابان و کوچه و پلاک مقایسه می شود.
  • می توانند متد داشته باشند و کارهایی درون خود انجام دهند. مثلا اگر شما Value Object برای نگهداری پول ایجاد کنید می توانید درون این Value Object متد تبدیل دلار به ریال یا ... هم پیاده سازی کرد.
  • دارای چسبندگی بالا هستند.
  • قابل ترکیب هستند.
  • قابل تغییر نیستند. چون اگر تغییر کنند ماهیت شی از بین رفته است. به عنوان مثال می گوییم شخصی که وزن 80 کیلوگرم و قد 180 سانتیمتر دارد رضا است. حال اگر وزن 90 کیلوگرم و قد 175 سانتیمتر شد مطمینا این شخص دیگر رضا نیست.
  • وظیفه validate کردن را انجام می دهند.
  • قابلیت تست پذیری بالایی دارند.

 

مثال از Value Object

خب ببینید من نمی خوام در اینجا مثال از پیاده سازی کامل یک Value Object رو براتون بیارم. توی این لینک مثال کاملی از پیاده سازی Value Object هست که می تونید انجام بدید. یکی از Value Object های خیلی پر کاربرد که شاید خیلی هم استفاده کردید DateTime هست. در واقع وقتی شما تاریخ و زمان رو نگهداری می کنید در یک متغیر DateTime اون متغیر یک Value Object هست. 

دلیل این امر هم واضح هست. متغیر DateTime آی دی نداره و برای مقایسه دو تاریخ مستقیم خود 2 تاریخ رو مقایسه می کنید.

دارای متدهای مختلفی مثل افرودن روز، ماه، سال یا بدست آوردن ثانیه، دقیقه و ... هست.

قابل تغییر نیست به این شکل که اگر هم شما تغییر بدید دیگه زمان کامل تغییر کرده و ماهیت زمان از بین رفته.

اعتبار سنجی رو انجام میده. یعنی شما نمی تونید یک عدد رو به جای زمان قرار بدید یا یک string.

 

امیدوارم تونسته باشم مفهوم Value Object رو براتون جا بندازم.

به این پاسخ امتیاز بدهید    2
امتیاز: 1617 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود