لطفا توضیح بدید مفهوم Value Object در برنامه نویسی چی هست و چه کاربردهایی داره ؟
خب ببینید شما با یک جستجوی ساده در گوگل می تونید مقالات زیادی رو در مورد مفهوم Value Object پیدا کنید. اما من می خوام طبق تجربه شخصی خودم و به صورت خیلی ساده این مفهوم رو براتون شرح بدم.
اول اینکه معمولا Value Object ها در معماری های بزرگی مثل معماری Domain Driven Desgin استفاده می شوند.
اجازه بدید یک مثال رو به صورت خیلی ساده براتون شرح بدم. فرض کنید قصد دارید برای یک بازی شطرنج برنامه نویسی کنید. خب در بازی شطرنج مهره ها نقش کلیدی دارند. هر مهره حرکات خاصی را می تواند انجام دهد. به عنوان مثال یک سرباز می تواند یک یا دو خانه جلو برود. یا مهره فیل می تواند به صورت مورب در خانه های سیاه یا سفید حرکت کند یا اینکه مهره اسب می تواند حرکت L (ال) مانند داشته باشد.
در واقع مهره های بازی شطرنج می توانند حرکات ثابتی را داشته باشند. یعنی اگر به شما بگویند مهره ای که فقط می تواند یک یا دو خانه به جلو حرکت کند کدام مهره است ؟ می توانید به راحتی بگویید مهره سرباز است.
خب مثال بالا را در نظر داشته باشید تا در ادامه بهتر به مفهوم Value Object بپردازیم.
از Value Object ها برای نگهداری اطلاعات ثابت یک شی استفاده می شود. این اطلاعات در نهایت باید منجر به شناسایی شی شود. به عنوان مثال فرض کنید یک کاربر داریم با نام و نام خانوادگی و آی دی منحصر بفرد و آدرس. خب در اینجا توسط ID میتوان کاربر را شناسایی کرد ولی ID هیچ گاه جزو Value Object ها حساب نمی شود. در اینجا میتوانیم بگوییم کاربری که در استان فارس، شهر شیراز، خیابان ملاصدرا، کوچه شماره 8 و پلاک 5 می باشد همان علی است. خب آدرس در اینجا یک Value Object می باشد.
یا در مثال شطرنج می توانیم بگوییم مهره ای که دو خانه به جلو می رود و سپس به سمت چپ یا راست حرکت می کند همان اسب می باشد. بنابراین حرکات مهره های شطرنج Value Object می باشند.
خب وقتی ما برای حرکات مهره ها Value Object تعریف کردیم به راحتی می توانیم میلیون ها و یا میلیاردها حالات مختلف حرکت مهره های شطرنج را کنترل کنیم. مثلا پروژه از این پس می داند که مهره سرباز یک یا دو خانه به جلو حرکت می کند.
برای تعریف Value Object ها باید توجه کنید که یک سری قواعد و مشخصه هایی وجود دارد. از جمله :
مثال از Value Object
خب ببینید من نمی خوام در اینجا مثال از پیاده سازی کامل یک Value Object رو براتون بیارم. توی این لینک مثال کاملی از پیاده سازی Value Object هست که می تونید انجام بدید. یکی از Value Object های خیلی پر کاربرد که شاید خیلی هم استفاده کردید DateTime هست. در واقع وقتی شما تاریخ و زمان رو نگهداری می کنید در یک متغیر DateTime اون متغیر یک Value Object هست.
دلیل این امر هم واضح هست. متغیر DateTime آی دی نداره و برای مقایسه دو تاریخ مستقیم خود 2 تاریخ رو مقایسه می کنید.
دارای متدهای مختلفی مثل افرودن روز، ماه، سال یا بدست آوردن ثانیه، دقیقه و ... هست.
قابل تغییر نیست به این شکل که اگر هم شما تغییر بدید دیگه زمان کامل تغییر کرده و ماهیت زمان از بین رفته.
اعتبار سنجی رو انجام میده. یعنی شما نمی تونید یک عدد رو به جای زمان قرار بدید یا یک string.
امیدوارم تونسته باشم مفهوم Value Object رو براتون جا بندازم.
تاریخ :
1400/12/18
- ساعت :
10:24:00 AM
- بازدید :
2035
- پاسخ :
1
|
تاریخ :
1401/01/26
- ساعت :
12:14:00 PM
- بازدید :
2894
- پاسخ :
1
|
تاریخ :
1403/10/20
- ساعت :
11:39:00 AM
- بازدید :
85
- پاسخ :
1
|
تاریخ :
1398/08/02
- ساعت :
02:59:00 AM
- بازدید :
5765
- پاسخ :
4
|
تاریخ :
1403/10/18
- ساعت :
10:20:00 PM
- بازدید :
96
- پاسخ :
1
|
تاریخ :
1402/10/30
- ساعت :
05:11:00 PM
- بازدید :
790
- پاسخ :
1
|
تاریخ :
1403/10/13
- ساعت :
09:45:00 PM
- بازدید :
123
- پاسخ :
1
|
تاریخ :
1403/10/13
- ساعت :
09:13:00 PM
- بازدید :
81
- پاسخ :
1
|
تاریخ :
1403/10/13
- ساعت :
08:31:00 PM
- بازدید :
92
- پاسخ :
1
|
تاریخ :
1403/10/13
- ساعت :
12:20:00 PM
- بازدید :
68
- پاسخ :
1
|
تاریخ :
1403/11/03
- ساعت :
07:34:00 PM
- بازدید :
51
- پاسخ :
0
|
تاریخ :
1399/12/20
- ساعت :
10:32:00 AM
- بازدید :
2517
- پاسخ :
1
|
تاریخ :
1398/08/09
- ساعت :
07:44:00 PM
- بازدید :
4855
- پاسخ :
1
|
تاریخ :
1399/09/20
- ساعت :
01:30:00 PM
- بازدید :
2570
- پاسخ :
1
|
تاریخ :
1403/11/03
- ساعت :
07:21:00 PM
- بازدید :
39
- پاسخ :
0
|
تاریخ :
1403/10/22
- ساعت :
12:29:00 PM
- بازدید :
81
- پاسخ :
1
|
تاریخ :
1399/09/20
- ساعت :
01:21:00 PM
- بازدید :
6640
- پاسخ :
1
|
تاریخ :
1403/11/02
- ساعت :
08:17:00 PM
- بازدید :
44
- پاسخ :
0
|
تاریخ :
1398/10/15
- ساعت :
08:02:00 PM
- بازدید :
2726
- پاسخ :
1
|
تاریخ :
1398/10/19
- ساعت :
02:01:00 PM
- بازدید :
3087
- پاسخ :
2
|