2009-02-27 21 views
11

किसी वास्तव में चाहता था और ORM उपकरण पर विरासत समर्थन करते थे, और हाँ, जो एक अगर आपको लगता है सबसे अच्छा समर्थन प्रदान करता है है?ORM विरासत

या ORM विरासत अवधारणा एक "आकाश में पाई" है?

+0

क्या आप ORM विरासत मतलब है

विरासत के साथ

, तो आप कुछ इस तरह करते हैं? –

+0

अन्य इकाई वर्गों से प्राप्त इकाई वर्ग प्राप्त करने में सक्षम होने के नाते। –

उत्तर

5

मुझे यह सवाल बहुत पसंद है। मैंने थोड़ी देर के लिए ओआरएम टूल्स (टॉपलिंक, अब एक्लिपेलिंक, हाइबरनेट) का उपयोग किया है और मैंने इसे हमेशा जेपीए दस्तावेजों में संदर्भित किया है लेकिन मुझे इसकी आवश्यकता नहीं है। मूल रूप से मेरा दर्शन ओआरएम डेटाबेस के लिए रिकॉर्ड खींचने के लिए टेडियस कोड लिखने से रोकने के लिए है। यह वास्तव में विशाल टाइमवेवर है और यह आपको बेवकूफ गलतियों से रोकता है। निश्चित रूप से आप इसके साथ फैंसी सामान कर सकते हैं, लेकिन मॉडल में चिपकने के बजाय इसे नियंत्रक के लिए क्यों नहीं बचाएं (यदि आप एमवीसी का पालन कर रहे हैं)?

+0

तो क्या आप कहेंगे कि पारंपरिक "एक वर्ग प्रति टेबल" दृष्टिकोण ज्यादातर मामलों के लिए काम करता है? –

+1

मेरे मामले में जो मैंने हमेशा पाया है। विरासत का उपयोग करने से मैपिंग आईएमओ को भ्रमित कर दिया जाता है और कुछ भी उपयोगी से खिलौना अधिक होता है। – GBa

3

आप डोमेन की कक्षाओं में भाग मतलब है, तो मैं यह सब समय का उपयोग NHibernate और/या कैसल ActiveRecord के साथ, वे तीन मानचित्रण रणनीतियों का समर्थन:

+0

धन्यवाद, मैं उन्हें देख लूंगा। –

+0

@ मॉरीसिओ मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें एक प्रकार का रिकॉर्ड है जिसे हम 'मास्टर' कहते हैं। लगभग 17 प्रकार के मास्टर रिकॉर्ड हैं, जिनमें अधिकांश डेटा फ़ील्ड होते हैं लेकिन प्रत्येक में एक या दो अद्वितीय फ़ील्ड हो सकते हैं। मेरे सामने लोगों ने 17 इकाई उप-वर्गों के साथ एक मास्टर इकाई वर्ग बनाने के लिए विरासत का उपयोग किया। यह पहली बार बहुत अच्छा लग रहा था, लेकिन थोड़ी देर के लिए इसके साथ काम करने के बाद मैं सोच रहा हूं कि एक 'मास्टर' टेबल जो शून्य मानों की अनुमति देती है, बेहतर नहीं हो सकती है (उदा।डेटाबेस में अब 17 अलग-अलग टेबल हैं, मैं एक प्रकार को आसानी से दूसरे प्रकार में नहीं बदल सकता)। मैं वास्तव में आपके विचारों की सराहना करता हूं। – theblang

+0

@mattblang हाय मैट, मैपिंग रणनीति के साथ डोमेन कक्षाओं में विरासत को भ्रमित मत करो। आपके पास अलग-अलग तालिकाओं या एक तालिका में मैप किए गए 17 उप-वर्ग हो सकते हैं, संदर्भ के लिए NHibernate दस्तावेज़ देखें। यदि आपको एक प्रकार को दूसरे में बदलने की ज़रूरत है, तो आपने पहले ही देखा है कि सामान्य रूप से विरासत, और विशेष रूप से तालिका-प्रति-वर्ग, अच्छी तरह से काम नहीं करते हैं। –

6

मैं हाइबरनेट साथ विरासत का इस्तेमाल किया है (और Django के साथ कुछ), और यह महंगा regreted।

"विरासत पर संरचना" सिद्धांत डोमेन वर्गों के लिए विशेष रूप से सच है। हालांकि मैं मानता हूं कि कुछ ऐसे मामले हैं जहां विरासत मॉडल स्तर पर समझ में आता है, ज्यादातर मामलों में विरासत आपको एक बहुत ही स्थिर डोमेन मॉडल प्रदान करेगी, जहां एक वस्तु किसी अन्य वर्ग में परिवर्तित नहीं हो पाएगी।

मैं यह भी पता है कि ज्यादातर डेवलपर्स डेटाबेस स्तर पर उत्तराधिकार की अवधारणा के साथ सहज नहीं हैं, इसलिए रखरखाव और अधिक जटिल हो जाता है।

और आखिरी, कुछ तकनीकी समस्याओं, हाइबरनेट द्वारा जगह में डाल प्रॉक्सी का एक वस्तु का actuall वर्ग छुपा देगा की तरह हैं। यह "उदाहरण" का अजीब व्यवहार करता है। बेशक, आप कह सकते हैं कि "उदाहरण का" एक कोड गंध है और शायद यह एक और संकेत है कि रचना शायद एक बेहतर समाधान है ...

+0

एक सीधी कक्षा-प्रति-तालिका (संरचना के साथ) की तरह दिखता है जो मैं यहां पढ़ रहा हूं उससे जाने का तरीका है। अंतर्दृष्टि के लिए धन्यवाद। –

+0

सहमत नहीं है। यदि आप ध्यान में रखते हैं कि आप एक वर्ग से दूसरे वर्ग में किसी इकाई को नहीं बदल सकते हैं, तो यह एक बहुत ही शक्तिशाली तकनीक है क्योंकि यह आपको अपने सामान्य ओओपी ज्ञान को अन्यथा संबंधपरक मॉडल पर लागू करने देती है। –

+0

प्रॉक्सी के पीछे वास्तविक प्रकार की जांच के लिए, यह बहुत सुगंधित है ... एक आगंतुक या बहुरूपता का उपयोग करें: http://www.hibernate.org/280.html –

1

यदि आप जटिल व्यापार सॉफ्टवेयर लिख रहे हैं, तो आपको इसकी आवश्यकता है।

मान लीजिए कि आप व्यक्तियों या संगठनों को सामान बेचने के लिए सक्षम होने के लिए चाहते हैं। बिक्री आदेश पर, खरीदार एक या दूसरे होगा। विरासत के बिना आप ऐसा कैसे करते हैं?

@Entity 
@Inheritance 
public abstract class Party { 

    @Id 
    private Long id; 

    ... 
} 

@Entity 
public class Individual extends Party { 
    ... 
} 

@Entity 
public class Organization extends Party { 
    ... 
} 

@Entity 
public class SalesOrder { 

    private Party buyer; 

    ... 
} 

तो फिर तुम क्या कर सकते हैं:

salesOrder.setBuyer(someOrganization) या salesOrder.setBuyer(someIndividual)

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