आईएमएचओ, दोनों दृष्टिकोण समान रूप से मूल्यवान हैं, जबकि native support for value objects के लिए प्रतीक्षा कर रहे हैं।
मैं व्यक्तिगत रूप से दूसरा दृष्टिकोण के पक्ष में (उन्हें accessors के माध्यम से instantiating जब अनुरोध) दो कारणों के लिए:
- आप उल्लेख किया है, यह बेहतर प्रदर्शन के रूप में रूपांतरण केवल जब जरूरत से किया जाता है प्रदान करता है;
- यह आपके आवेदन को सिद्धांत निर्भरता से हटा देता है: आप कम कोड लिख रहे हैं जो सिद्धांत-विशिष्ट है।
इस दृष्टिकोण का एक उदाहरण:
class User
{
protected $street;
protected $city;
protected $country;
public function setAddress(Address $address)
{
$this->street = $address->getStreet();
$this->city = $address->getCity();
$this->country = $address->getCountry();
}
public function getAddress()
{
return new Address(
$this->street,
$this->city,
$this->country
);
}
}
जब सिद्धांत देशी VO समर्थन की पेशकश करेगा इस कोड को काफी refactor करने के लिए आसान हो जाएगा।
बारे custom mapping types, मैं VO (Decimal
, Point
, Polygon
, ...) लेकिन सामान्य प्रयोजन के लिए उन्हें आरक्षण जाते हैं, पुन: प्रयोज्य प्रकार कई परियोजनाओं भर में इस्तेमाल किया जा सकता है कि, साथ ही उन्हें इस्तेमाल एकल क्षेत्र के लिए करते हैं , प्रोजेक्ट-विशिष्ट सिंगल-फील्ड वीओ के लिए नहीं, जहां मैं ऊपर दिए गए दृष्टिकोण का पक्ष लेगा।