2013-11-04 6 views
5

मेरे पास 2 इकाइयां हैं - फिल्म और अभिनेता - जिनमें एम: एन रिश्ते हैं। इन संस्थाओं के लिए डीटीओ वस्तुओं को डिजाइन करते समय मुझे यकीन नहीं है कि जाने का सही तरीका क्या है।एम के साथ इकाइयों के डेटा ट्रांसफर ऑब्जेक्ट्स एम: एन या 1: एन रिलेशनशिप

मूवी

@Entity 
@Table(name = "Movies") 
public class Movie extends AbstractBusinessObject {  

    private String name; 
    private String short_info;  

    @ManyToMany 
    private Map<String, Actor> cast; 

} 

अभिनेता

@Entity 
@Table(name = "Actors") 
public class Actor extends Person{ 

    private String name; 

    @ManyToMany(mappedBy = "cast") 
    private Set<Movie> movies; 

} 

अब DTOs के विषय में: एम एन और: मैं 1 से निपटने के लिए कैसे दो अलग अलग तरीकों का सामना करना पड़ा एन रिश्तों ।

सहेजा जा रहा है केवल आईडी:

public class MovieDto {  

    private String name; 
    private String short_info;  

    // Long represents Actor's ID 
    private Map<String, Long> cast; 

} 

हालांकि के रूप में कहा here मुझे लगता है कि Instead of performing many remote calls on EJBs, the idea was to encapsulate data in a value object सोचा, और इस दृष्टिकोण स्पष्ट रूप से नियम को तोड़ता।

डीटीओ में बचत डीटीओ: एक और तरीका अभिनेता के डीटीओ को अपने आईडी के बजाय स्टोर करना होगा।

public class MovieDto {  

    private String name; 
    private String short_info; 

    private Map<String, ActorDto> cast; 

} 

मुझे ऐसा लगता है कि इस दृष्टिकोण, तेजी से किया जाएगा के रूप में मैं डेटाबेस हर मैं उदाहरण के लिए अभिनेता का नाम दिखाने की जरूरत है कॉल करने के लिए नहीं है।

क्या यह धारणा सही है, या यह केवल आईडी (दूसरे दृष्टिकोण की अंतरिक्ष खपत पर विचार करने) को स्टोर करना बेहतर होगा?

प्लस दूसरे दृष्टिकोण के परिणामस्वरूप एक इकाई के लिए कई डीटीओ होंगे। मिसाल के तौर पर, मुझे यह जानने की ज़रूरत नहीं है कि "मूवी पेज" को देखते समय अभिनेता ने कौन सी फिल्में खेली हैं, लेकिन मुझे "अभिनेता पेज" देखने पर इसकी ज़रूरत है।

+0

क्या आपको वास्तव में डीटीओ की आवश्यकता है? वे अक्सर डुप्लिकेट कोड होते हैं। आप एक इकाई वापस कर सकते हैं, जिसमें केवल आईडी फ़ील्ड सेट है –

उत्तर

3

माता-पिता डीटीओ के अंदर अन्य डीटीओ उदाहरणों को एम्बेड करना पूरी तरह से स्वीकार्य है। बेशक, अगर वस्तु बहुत बड़ी हो जाती है तो यह निषिद्ध हो सकता है। तो यह वह जगह है जहां आपको किसी प्रकार का व्यापार करना है।

इसके आसपास जाने का एक तरीका आंशिक प्रतिनिधित्व और पूर्ण प्रतिनिधित्व होना है। ऐसे मामलों में जहां आपको पूर्ण डेटा की आवश्यकता नहीं है, आप आंशिक प्रतिनिधित्व का उपयोग कर सकते हैं। जिन मामलों में आपको पूर्ण डेटा की आवश्यकता है, आप पूर्ण प्रतिनिधित्व का उपयोग कर सकते हैं। आप इसे भी प्राप्त कर सकते हैं ताकि पूर्ण प्रतिनिधित्व इसके अंदर आंशिक प्रतिनिधित्व को एम्बेड कर सके (रचना) और केवल उस पर कॉल को आंशिक डेटा के लिए रोक देता है।

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

+0

इस उदाहरण में, यदि आप एक डीटीओ बनाते हैं जिसमें अन्य डीटीओ होते हैं तो अंतहीन चक्र नहीं होते हैं? एक मूवीडीटीओ बनाएं, जिसमें अभिनेता डीटीओ हैं, जिनमें से प्रत्येक में मूवीडीटीओ हैं, जिनमें से प्रत्येक में अभिनेता डीटीओ इत्यादि हैं ... आप डीटीओ कैसे बनाते हैं जब संस्थाएं एक-दूसरे को संदर्भित करती हैं? – user798719

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

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