2011-12-09 20 views
8

मैं मूल्य वस्तुओं में कस्टम डीबीएएल प्रकारों के रूप में मूल्य वस्तुओं को कार्यान्वित कर रहा हूं और यह ठीक काम कर रहा है। हालांकि मैं सोच रहा हूं कि यह सबसे अच्छा तरीका है या नहीं। मैंने मूल्य ऑब्जेक्ट को तुरंत चालू करने के लिए पोस्ट लोड श्रोता का उपयोग करने के बारे में सोचा है। अनुरोध करते समय एंटिटी एक्सेसर्स के माध्यम से उन्हें तुरंत चालू करना, बाद वाले के साथ लाभ यह होगा कि मैं जितनी आवश्यकता हो उतनी वस्तुओं को तुरंत चालू नहीं करूंगा।सिद्धांत 2 मूल्य ऑब्जेक्ट्स

मेरा प्रश्न है: कौन सी विधि सर्वोत्तम है? या क्या ऐसा करने का एक बेहतर तरीका है? क्या उपर्युक्त के साथ कोई गठिया या अनुचित प्रदर्शन हिट है?

उत्तर

8

आईएमएचओ, दोनों दृष्टिकोण समान रूप से मूल्यवान हैं, जबकि 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, ...) लेकिन सामान्य प्रयोजन के लिए उन्हें आरक्षण जाते हैं, पुन: प्रयोज्य प्रकार कई परियोजनाओं भर में इस्तेमाल किया जा सकता है कि, साथ ही उन्हें इस्तेमाल एकल क्षेत्र के लिए करते हैं , प्रोजेक्ट-विशिष्ट सिंगल-फील्ड वीओ के लिए नहीं, जहां मैं ऊपर दिए गए दृष्टिकोण का पक्ष लेगा।

संबंधित मुद्दे