2012-05-31 16 views
7

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

public class Product 
{ 
    public string Title {get;set;} 
    public string Description {get;set;} 

    public string RetailPrice {get;set;} 
    public string SupplierId {get;set;} 

    public Supplier Supplier { get;set;} 

    // many other properties 
} 

public class ProductDiscountService 
{ 
    public decimal Get(Product product) 
    { 
     // use only RetailPrice and Supplier code 
     return discount; 
    } 
} 

public class ProductDescriptionService 
{ 
    public string GetSearchResultHtml(Product product) 
    { 
     // use only Title and Description 
     return html; 
    } 
} 

ऐसा लगता है कि मैं उन इंटरफेस को लागू करने के रूप में इंटरफेस IDiscountProduct और ISearchResultProduct, मार्क उत्पाद निकाल सकते, तो उन इंटरफेस में से प्रत्येक को लागू छोटे DTOs बनाने के लिए, लेकिन यह है कि (कम से कम overkill के रूप में इस समय लग रहा है मैंने इंटरफ़ेस का उपयोग करके किसी को समूहबद्ध गुण नहीं देखा है)।

छोटे इकाइयों में डेटाबेस में इकाई को विभाजित करने के लिए भी उचित नहीं दिखता है, क्योंकि ये सभी गुण उत्पाद से संबंधित हैं और मुझे डर है कि मुझे कुछ चुनने के लिए कई जुड़ने का उपयोग करने के लिए मजबूर होना होगा और यदि मैं यह तय करूंगा कुछ संपत्ति किसी अन्य इकाई से संबंधित है, यह कदम लागू करने के लिए काफी कठिन होगा।

प्रत्येक विधि को विशेष विधि के व्यवसाय तर्क में उपयोग करने के लिए विधि पैरामीटर भी खराब समाधान की तरह दिखता है।

+0

हम कितने गुणों के बारे में बात कर रहे हैं? – walther

+0

आम तौर पर 20 से कम, 20 से कम, – Giedrius

+0

मैं कहूंगा: यदि आपकी विधि पहले से जानता है कि कौन से गुणों का उपयोग करना है और यह तय रहता है, पैरामीटर का उपयोग करने से एक अच्छा समाधान हो सकता है। परीक्षण करने में आसान और पुन: उपयोग करने में आसान है। हालांकि, यदि कार्यान्वयन विधि हस्ताक्षर में अपरिभाषित है (वर्तमान कार्यान्वयन 2 गुणों का उपयोग करता है लेकिन कल ये 3 हो सकता है), तो आप उपलब्ध सभी गुणों के साथ पूरी उत्पाद चीज़ का उपभोग करना चाहते हैं। यह एक सतत तरीके से बोलता है: इस विधि के लिए इन मानकों की आवश्यकता है और इस विधि को एक उत्पाद की आवश्यकता है। – Polity

उत्तर

1

जब तक गुण बड़े नहीं होते हैं (लंबे तार और/या बाइनरी पढ़ें) मैं उन्हें बस लोड कर दूंगा। नीचे

अंक सरल गुण (जैसे शीर्षक)

  1. कोई अतिरिक्त कोड (केवल शीर्षक के साथ इस उत्पाद मिलता है, या कीमत केवल, बकवास के साथ मिलता है)
  2. एक उत्पाद उदाहरण हमेशा के लिए कर रहे हैं पूरा करें, ताकि आप यह जांच किए बिना पास कर सकें कि संपत्ति शून्य है या नहीं।
  3. यदि आपको कुछ अन्य संपत्तियों को आलसी लोड करना होगा, तो आपको उन्हें उत्सुकता से लोड करने से अधिक खर्च आएगा। यदि आपके पास 20 गुण हैं - यह एक बड़ी वस्तु भी नहीं है (फिर, यदि आपका (काल्पनिक) विवरण संपत्ति आकार में किलोबाइट नहीं है)।

अब, यदि आपके पास संबंधित ऑब्जेक्ट्स (ProductSupplier) हैं - यह आलसी लोड हो जाना चाहिए, इमो, जब तक आपको पता न हो कि यह संपत्ति उपयोग की जाएगी।

+0

ठीक है, असली परियोजना विवरण में एचटीएमएल है, इसलिए कई किलोबाइट सामान्य मामला है।एक और बात यह है कि, हमारे व्यापार मॉडल की प्रकृति की वजह से, हम आमतौर पर बड़ी मात्रा में उत्पादों (हजारों) को संसाधित करते हैं, इसलिए बड़ी क्वेरी गिनती के कारण आलसी लोडिंग स्वीकार्य नहीं है। इसलिए यदि आपके पास गुणों में हजारों उत्पाद और किलोबाइट हैं, तो यह डेटाबेस से लोड होने के लिए काफी महत्वपूर्ण हो जाता है :) मैं कुछ त्वरित पढ़ने वाले स्टोरेज को रखने के बारे में सोच रहा था, जैसे कि रेडिस के बीच में, जब तक लिखने से कहीं ज्यादा पढ़ा जाता है। – Giedrius

+0

एक प्रकार की प्रसंस्करण पर निर्भर करता है। जब हमें अतीत में डेटा के बड़े सेट के साथ काम करना पड़ा - हमने इसे सिर्फ स्मृति में लोड किया, और वहां से काम किया, लेकिन वह सेट केवल पढ़ने के लिए था .. और हमने उस समाधान को छोड़कर डेटाबेस पर वापस जा दिया। वैसे भी, आपके मामले में मुझे लगता है कि मैं मापता हूं कि आपको वास्तव में गुणों की कितनी बार आवश्यकता होती है, और उन्हें उत्सुकता से लोड करने का वास्तविक प्रभाव क्या होता है। मुझे अभी भी नहीं लगता है कि प्रति रिकॉर्ड कई केबी बहुत अधिक है - भले ही आपके पास कुछ (5-10?) हजारों रिकॉर्ड हों, यह केवल कुछ एमबी पढ़ने के लिए है। उचित इंडेक्स होने से बहुत अधिक महत्वपूर्ण होगा। – Evgeni

+0

रेडिस या मेमकैच भी एक लायक हो सकता है। आपकी जरूरतों पर निर्भर करता है, लेकिन रावेनडीबी जैसे कुछ भी मदद कर सकते हैं। – Evgeni

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