2009-06-04 15 views
8

मूल्य वस्तुओं को कोई पहचान नहीं मिली। ORM डेटाबेस को अद्यतन करने के लिए पहचान की आवश्यकता है।डीडीडी, मूल्य वस्तुएं और ओआरएम

ओआरएम कैसे चालित करें?

(आंतरिक वस्तु के रूप में मूल्य वस्तु के लिए आईडी चिह्नित करना काम नहीं करेगा, क्योंकि ओआरएम अलग-अलग असेंबली में रहता है और इसे उसी असेंबली में ले जाया जाता है)।

अग्रिम धन्यवाद।

उत्तर

4

जहां तक ​​डीडीडी की मेरी समझ मान जाती है वैल्यू ऑब्जेक्ट्स आपकी संस्थाओं को विभाजित करने का एक तरीका है। यदि किसी मान ऑब्जेक्ट को डेटाबेस में किसी आईडी के साथ संग्रहीत किया जाना चाहिए तो यह एक मान ऑब्जेक्ट नहीं है।

उदाहरण:

डोमेन मॉडल की तरह इस (सी #) दिखता है:

public class Customer : Entity 
{ 
    public Guid CustomerID { get; } 

    public string LastName { get; set; } 

    public Address HomeAddress { get; set; } 
} 

public class Address : ValueObject 
{ 
    public string Street { get; set; } 

    public string City { get; set; } 

    public string ZipCode { get; set; } 
} 

इसी डेटाबेस तालिका इस (छद्म एसक्यूएल) कुछ ऐसा दिखाई देगा:

CREATE TABLE Customers 
(
    CustomerID, 

    LastName, 

    HomeAddress_Street, 

    HomeAddress_City, 

    HomeAddress_ZipCode, 
) 

पते को एक अलग तालिका में स्टोर करने के लिए आप इसे एक इकाई बना देंगे जिसमें एक आईडी है।

+5

लेकिन फिर डोमेन मॉडल डेटाबेस का केवल 1: 1 है, पता अभी भी एक मूल्य वस्तु हो सकता है और अभी भी एक अलग तालिका है। – TWith2Sugars

+1

नहीं, यह डेटाबेस का 1: 1 नहीं है। आपके पास एक ग्राहक वर्ग और एक एड्रेस क्लास है (जो मूल्य वस्तु है)। NHibernate में, एक मान वस्तु को घटक के रूप में मैप किया जाता है। जैसे ही आपके पास एक ऐसी इकाई है जिसके लिए आईडी की आवश्यकता है, यह अब एक मूल्य वस्तु नहीं है। –

+6

लेकिन यदि आपको किसी तालिका में पता सहेजने की आवश्यकता है तो उसे डेटाबेस द्वारा आईडी की आवश्यकता होगी। सिर्फ इसलिए कि डेटाबेस को एक आईडी की आवश्यकता होती है इसका मतलब यह नहीं है कि ऑब्जेक्ट तुरंत एक इकाई है। – TWith2Sugars

3

व्यक्तिगत रूप से मेरे पास मूल्य वस्तु में आईडी फ़ील्ड है - मैं इसे मूल्य वस्तु (जैसे नाम, स्थान इत्यादि) की एक अन्य विशेषता के रूप में मानता हूं।

यह सच डीडीडी नहीं हो सकता है लेकिन यह मेरे लिए काम करता है।

+2

मुझे नहीं लगता कि इसमें कोई समस्या है। एरिक इवान को हर किसी के सिर को कताई मिल गई है क्योंकि उदाहरण देने के बिना अवधारणाओं के बारे में बात करना आसान है। –

35

जब एरिक इवांस "इकाइयों की पहचान है, वैल्यू ऑब्जेक्ट्स नहीं है" के बारे में बात करते हैं, तो वह डेटाबेस में आईडी कॉलम के बारे में बात नहीं कर रहा है - वह अवधारणा के रूप में पहचान के बारे में बात कर रहा है।

वीओ के पास वैचारिक पहचान नहीं है। इसका मतलब यह नहीं है कि उनके पास दृढ़ता पहचान नहीं होनी चाहिए। दृढ़ता कार्यान्वयन को संस्थाओं बनाम वीओ की अपनी समझ को क्लाउड न होने दें।

मेरी पोस्ट here देखें।

+0

लेकिन मैं कोड में वैचारिक पहचान की कमी दिखाना चाहता हूं। बीटीडब्ल्यू, मैंने पहले उस पोस्ट को देखा है। –

+1

अपनी आवश्यकता को स्पष्ट करने के लिए: आप अपनी वीओ ऑब्जेक्ट पर आईडी प्रॉपर्टी को छिपाना चाहते हैं, लेकिन आपको आईडी प्रॉपर्टी देखने के लिए ओआरएम चाहिए? दो प्रश्न: 1) क्या आपका ओआरएम निजी/आंतरिक क्षेत्रों तक पहुंच सकता है? (एनएचबीर्नेट की तरह) 2) वीओ की आईडी संपत्ति को 'छिपाने' से आपको कितना लाभ मिलता है? –

+0

उल्लेख करना भूल गया - मैं NHibernate का उपयोग कर रहा हूं ... तो - NHibernate के साथ इसे कैसे करें? –

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