2011-01-19 17 views
5

मैं वर्तमान में एक वेब स्क्रैपर लिख रहा हूं जो इंटरनेट से जानकारी प्राप्त करता है। सरलीकृत यह इस तरह दिखता है।परिपत्र-निर्भरता सर्वोत्तम अभ्यास

डेटा एक्सेस परियोजना

  • वस्तुओं कच्चे डेटा
  • वस्तुओं को पुनः प्राप्त करने वस्तुओं में कच्चे डेटा पार्स करने के लिए (!!)
  • संस्थाएं जो पार्सर रिटर्न।

अब, मैं वास्तविक पार्सर बना रहा हूं, और मैं इस तरह इसका इस्तेमाल करने के लिए जा रहा हूँ:

using Application.DataAccess; 
using Application.DataAccess.Entities; 

namespace Application{ 
public class TestScraper{ 
    public static ScrapeIt() 
    { 
    var source = DataAcces.Retriever.Retrieve("http://example.com"); 
    DataAccess.Entities.Entity entity = DataAccess.Parser.Parse(source); 

    //Do stuf with source here. 
    } 
} 
} 

आप देख सकते हैं, पार्सर रिटर्न एक इकाई। हालांकि यह डेटाएप नेमस्पेस में है, फिर भी, इसका कोई मतलब नहीं है ... यह एक सर्कल है, और मैं वास्तव में यह नहीं जानता कि इसे कैसे ठीक किया जाए। खैर मैं कुछ चीजों के साथ आ सकता था, जैसे कि उन परतों के बीच एक और परत बनाना।

लेकिन मैं सिर्फ यह जानना चाहता हूं कि आप इसे कैसे हल करेंगे। और इसके लिए एक अच्छा (या सबसे अच्छा अभ्यास) क्या है।

+1

डेटा एक्सेस नेमस्पेस में आपके पुनर्प्राप्तियां और पार्स क्यों हैं, निश्चित रूप से उनके पास डेटा तक पहुंचने के लिए कुछ भी नहीं है जब तक आप इकाई को सहेजने के लिए नहीं आते? – Hawxby

+0

क्षमा करें, लेकिन मुझे सर्कल दिखाई नहीं देता है। – SWeko

+0

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

उत्तर

11

आप दोनों कक्षाओं को एक नई कक्षा में संदर्भित करने के लिए एक परिपत्र संदर्भ को ठीक कर सकते हैं, और फिर पुरानी कक्षाएं दोनों नई कक्षा का संदर्भ देती हैं।

तो आपके मामले में आप डेटाएप से बाहर इकाइयों को स्थानांतरित कर सकते हैं और शायद एक नई इकाई नामस्थान में डेटाएप और एप्लिकेशन दोनों द्वारा उपयोग किए जा सकते हैं।

ऐसा करने से आप

A <--> D 

के साथ शुरू और

A --> E 
D --> E 
+2

+1 - इस तरह मैं इसे करूँगा। सामान्य निर्भरताओं को परिभाषित करें जो परिपत्र संदर्भ बनाते हैं और फिर उन्हें निकालें। –

+0

क्या आप इसका एक उदाहरण दे सकते हैं। क्योंकि मैं उलझन में हूं कि क्या नई कक्षा में केवल हेडर घोषणा शामिल है और इसकी अपनी कक्षा है या सिर्फ हेडर घोषणा कार्य है? –

1

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

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