2009-07-03 16 views
5

चलिए एक साधारण स्प्रिंग एमवीसी कंट्रोलर मानते हैं जो किसी डोमेन ऑब्जेक्ट की आईडी प्राप्त करता है। नियंत्रक को ऐसी सेवा कॉल करनी चाहिए जो उस डोमेन ऑब्जेक्ट के साथ कुछ करे।स्प्रिंग एमवीसी डोमेन ऑब्जेक्ट हैंडलिंग बेस्ट प्रैक्टिस

डोमेन ऑब्जेक्ट की आईडी को डोमेन ऑब्जेक्ट में डेटाबेस से लोड करके आप "कन्वर्ट" कहां करते हैं? यह नियंत्रक द्वारा नहीं किया जाना चाहिए। इसलिए सेवा विधि इंटरफ़ेस को डोमेन ऑब्जेक्ट के बजाय डोमेन ऑब्जेक्ट के आईडी को स्वीकार करना होगा। लेकिन सेवा का इंटरफ़ेस अच्छा होगा यदि यह डोमेन ऑब्जेक्ट को पैरामीटर के रूप में लेता है।

इस सामान्य उपयोग के मामले के बारे में आपके विचार क्या हैं? इसे आप कैसे हल करते हैं?

उत्तर

4

नियंत्रक को आईडी को सेवा परत में पास करना चाहिए और फिर शेष HTTP प्रतिक्रिया प्रदान करने के लिए जो कुछ भी आवश्यक है उसे वापस लेना चाहिए।

तो -

Map<String,Object> doGet (@RequestParam("id") int id) { 
    return serviceLayer.getStuffByDomainObjectId(id); 
} 

और कुछ सिर्फ वेब परत है, जो परवाह नहीं करनी चाहिए सब पर दृढ़ता के बारे में प्रदूषण होने जा रही है। सेवा परत का पूरा उद्देश्य डोमेन ऑब्जेक्ट्स प्राप्त करना और उन्हें अपने व्यावसायिक तर्क को करने के लिए कहना है। इसलिए, डेटाबेस कॉल में सर्विस लेयर में रहना चाहिए -

public Map<String,Object> getStuffByDomainObjectId(int id) { 
    DomainObject domainObject = dao.getDomainObjectById(id); 
    domainObject.businessLogicMethod(); 
    return domainObject.map(); 
} 
2
मेरा एक परियोजना में

मैं सेवा परत का प्रयोग किया:

class ProductService { 

    void removeById(long id); 

} 
2

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

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

+0

निक, यह "मूल बिंदु" है :-) – anton1980

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