2010-07-16 14 views
6

हाल ही में मैं पढ़ा है लेख "The Entity Framework In Layered Architecture" और वहाँ लिखा है हम WCF के माध्यम से ग्राहक के लिए एफई-संस्थाओं भेज सकते हैं। लेकिन Stackoverflow लोगों पर कई धागे में बताया है कि जब हम WCF का उपयोग POCO (डीटीओ) -objects इस्तेमाल किया जाना चाहिए। और मेरे कुछ प्रश्न हैं।स्तरित आर्किटेक्चर में इकाई की रूपरेखा

  1. माइक्रोसॉफ्ट ने ईएफ-इकाइयों को डेटाकंट्रैक्ट विशेषता क्यों जोड़ा? क्या माइक्रोसॉफ्ट चाहता था कि हम अपने ऑब्जेक्ट्स में इन वस्तुओं का हर जगह इस्तेमाल करें? या यह केवल बहुत ही सरल अनुप्रयोगों और तेजी से विकास के लिए है?

  2. अगर मैं POCO-वस्तुओं का उपयोग करें, मैं ऑटो एफई-संस्थाओं, POCO-संस्थाओं को उत्पन्न किया और उसके बाद उन दोनों के बीच किसी भी मानचित्रण लाइब्रेरी का उपयोग बनाना चाहिए? या मुझे अपने आवेदन के सभी घटकों में केवल पॉको-ऑब्जेक्ट्स का उपयोग करना चाहिए?

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

अग्रिम

+2

ध्यान रखें कि यह आलेख 2 साल पहले लिखा गया था। तब से कई चीजें बदल गई हैं। ईएफ 4.0 कुछ नई विशेषताएं लाता है, पोको के साथ काम करता है, डब्ल्यूसीएफ के साथ बेहतर काम करता है और इसी तरह। – nemke

+0

हाँ, मैं समझता हूं। मैं केवल यह तय करने का प्रयास करता हूं कि मेरा आवेदन कैसे विकसित किया जाए। –

+0

क्या मैं आपसे पूछ सकता हूं कि आप अपने यूआई परत में क्या उपयोग कर रहे हैं? – SDReyes

उत्तर

3

1.Why धन्यवाद माइक्रोसॉफ्ट एफई-संस्थाओं में जोड़ने था DataContract विशेषता? माइक्रोसॉफ्ट चाहता था हमें हमारे अनुप्रयोगों में हर जगह इन वस्तुओं का उपयोग करने के करता है? या यह केवल बहुत सरल अनुप्रयोगों के लिए और तेजी से विकास के लिए है?

आम तौर पर, सेवा परत में अपनी ईएफ-इकाइयों का पर्दाफाश करना एक बुरा विचार है क्योंकि यह शायद ही आपकी सेवा परत और मॉडल का प्रतिनिधित्व करता है। इसलिए मॉडल में किए गए कोई भी बदलाव सीधे आपकी सेवाओं को प्रभावित करते हैं, न कि एक अच्छा विचार। आपको कुछ समय में अपनी सेवा परत का संस्करण भी करना होगा, इसलिए अपनी सेवा परत में ईएफ इकाइयों का पर्दाफाश करने से बचें।

2. यदि मैं POCO-वस्तुओं का उपयोग करें, मैं ऑटो एफई-संस्थाओं, POCO-संस्थाओं को उत्पन्न किया और उसके बाद उन दोनों के बीच किसी भी मानचित्रण लाइब्रेरी का उपयोग बनाना चाहिए? या मैं अपने आवेदन के सभी घटकों में केवल POCO-वस्तुओं का उपयोग करना चाहिए?

आप अपनी सेवा परत के अंदर POCO वस्तुओं का उपयोग कर सकते, (Automapper देखते हैं, इकाई-डीटीओ मानचित्रण लागत को कवर करने के लिए) किसी भी अंतर्निहित परतों से यह दसगुणा। लेकिन आप अभी भी अपने आर्किटेक्चर में डेटा और व्यापार परतों के बीच स्वत: उत्पन्न ईएफ-इकाइयों का उपयोग कर सकते हैं। डेटा परत से अलग अन्य परतों में अपने जेनरेट किए गए डोमेन मॉडल की ईएफ विशिष्ट विशेषताओं में भरोसा न करने का प्रयास करें। किसी अन्य ओआरएम ढांचे में माइग्रेशन को कम करने के लिए।

मैं पहले से ही अपने काम से काम इकाई है, जो कुछ तरीकों है, और यह पर, POCO वस्तु को मैप किया जाना चाहिए जो परत मैं (मेरी संस्था के लिए POCO-वस्तु कन्वर्ट चाहिए उदाहरण के लिए, के लिए तो मैं दृढ़ता परत, व्यापार तर्क परत, सेवा परत (WCF), प्रस्तोता परत (ग्राहक, WCF का उपयोग करें), यूआई परत) है? या मुझे अपनी अपनी संस्थाएं नहीं बनाना चाहिए?

सेवा परत http://msdn.microsoft.com/en-us/library/ms978717.aspx। आप अपने डोमेन मॉडल को अपने आवेदन के सर्वर स्तर (दृढ़ता, व्यापार, सेवा और प्रस्तुतकर्ता परतों) के बीच पारदर्शी रूप से उपयोग करेंगे, और केवल एक परत जो आपको एक डीटीओ मैपिंग की आवश्यकता होगी सेवा स्तर है, प्रश्न 1 देखें। (इसके अतिरिक्त यदि आप प्रस्तुति परत-अंदर विचार के अंदर ViewModels का उपयोग कर रहे हैं- आपको प्रस्तुतकर्ता परत में भी POCOs-mapping का उपयोग करने की आवश्यकता होगी)।

+0

मैं क्लाइंट को पीओसीओ भेजने का सुझाव दूंगा, सिवाय इसके कि ऐसी कोई तकनीक है जिसके लिए आपको ऐसा करने की आवश्यकता है (आरआईए सेवाएं स्पष्ट रूप से करती हैं, लेकिन मुझे इसकी पुष्टि करने की आवश्यकता है)। तो आप एक स्वच्छ सेवा परत – SDReyes

+0

का पर्दाफाश करेंगे बहुत बहुत धन्यवाद। और अगर मैं अन्य ओआरएम में ईएफ को बदलने का फैसला करूंगा, तो मुझे सेवा परत भी संशोधित करनी चाहिए, है ना? –

+0

बिल्कुल। व्यापार और सेवा परत। इसलिए आपको अपने समाधान, सेवा परत की सीमा तक डीटीओ को पॉप्युलेट करने और संभालने की चिंता करने की आवश्यकता नहीं होगी। – SDReyes

1

आप POCO संस्थाओं हस्तलिखित और पूरी तरह से हठ परत से अलग हो सकता है इस लेख पढ़ना चाहिए। एसडीआरईएस जेनरेटेड ईएफ इकाइयों का उपयोग कर सही है, क्योंकि आपका मॉडल सुगंधित है।

यहां एक साधारण पॉको मॉडल और इसका समर्थन करने के संदर्भ के लिए एक मोटा लेआउट है।

public class MyApplicationContext : ObjectContext, IMyApplicationContext { 
    public MyApplicationContext() : base("name=myApplicationEntities", "myApplicationEntities") 
    { 
    base.ContextOptions.LazyLoadingEnabled = true; 
     m_Customers = CreateObjectSet<Customer>(); 
     m_Accounts = CreateObjectSet<Account>(); 
    } 

private ObjectSet<Customer> m_Customers; 
public IQueryable<Customer> Customers { 
     get { return m_Customers; } 
    } 
private ObjectSet<Account> m_Accounts; 
public IQueryable<Account> Accounts { 
     get { return m_Accounts; } 
    } 

public Account CreateAccount(Customer customer) { 
    var account m_Accounts.CreateObject(); 
    account.Customer = customer; 
    return account; 
} 
public Customer CreateCustomer() { 
    return m_Customers.CreateCustomer(); 
} 

public void AddAccount(Account account) { 
    m_Accounts.AddObject(account); 
} 
public void AddCustomer(Customer customer) { 
    m_Customers.AddCustomer(customer); 
} 
} 

public class Account { 
    public int Balance {get;set;} 
    virtual public Customer{get;set;} 
} 

public class Customer { 
    public string Name {get;set;} 
    virtual public List<Account> Accounts{get;set;} 
} 
संबंधित मुद्दे