2012-08-28 22 views
5

हम इन दो दृष्टिकोण डेटा एक्सेस परत या किसी अन्य स्रोत से डेटा भेजने के लिए कर सकते हैं:भंडार पैटर्न बनाम डीटीओ पैटर्न दृष्टिकोण

दृष्टिकोण 1: भंडार रास्ता:

public class User 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int Age { get; set; } 
} 

public class UserRepository 
{ 
    public static void Add(User user) 
    { 
     // Add user logic 
    } 
    public static void Delete(User user) 
    { 
     // Delete user logic 
    } 
    public static User Get(int userid) 
    { 
     // Get user logic 
    } 
} 

उपयोग:

var user = new User 
    { 
     FirstName = "FirstName", 
     LastName = "LastName", 
     Age = 20 
    }; 
UserRepository.Add(user); 

ऊपर, आपने देखा है कि मैंने उपयोगकर्ता सी रखा है लस सरल। इसका कोई व्यवहार नहीं है। व्यवहार एक अलग वर्ग उपयोगकर्ता रिपोजिटरी में जोड़ा जाता है।

दूसरा दृष्टिकोण: रखते हुए जोड़े/हटाएं/जाओ आदि केवल User.cs में:

public class User 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public int Age { get; set; } 

     public void Add() 
     { 
      // Add user logic 
     } 
     public void Delete() 
     { 
      // Delete user logic 
     } 
     public User Get() 
     { 
      // Get user logic 
     } 
    } 

उपयोग:

var user = new User 
    { 
     FirstName = "FirstName", 
     LastName = "LastName", 
     Age = 20 
    }; 
user.Add(); 

से ऊपर मैं User.cs में व्यवहार रखा है केवल । दोनों दोनों दृष्टिकोण उपयोगकर्ता को जोड़ने, हटाने, आदि के उद्देश्य से कार्यरत हैं। क्या आप मुझे

  1. कौन सा दृष्टिकोण बेहतर है?

  2. यह तय करने के लिए कि उपर्युक्त दो दृष्टिकोणों में से कौन सा विकल्प चुनना है?

  3. अगर मैं FindAllUsers, जैसे भी अन्य तरीकों जोड़ने के लिए FindUserByUserId, DeleteUserByUserId जो दृष्टिकोण मैं के लिए जाना चाहिए?

उत्तर

10

पहला दृष्टिकोण कहीं बेहतर है क्योंकि आप चिंताओं को अलग कर रहे हैं यानी डोमेन इकाई उपयोगकर्ता और डेटाबेस के लिए दृढ़ता।

सबसे महत्वपूर्ण चीजें हैं जो अक्सर में डोमेन प्रेरित डिजाइन के बारे में बात कर रहा है में से एक है "हठ अज्ञान" What are the benefits of Persistence Ignorance?

देखें भंडार पैटर्न, जिस तरह से आप को बचाने का उपयोग करके/हो तो अपनी इकाई इकाई से बाहर रखा गया है कोड, अपने डोमेन यानी यह क्लीनर रखने और संक्षेप में हठ अज्ञान को प्राप्त करने के लिए (या वैसे भी इस दिशा में एक लंबा रास्ता जा रहा)

तो जवाब:

  1. भंडार approch बेहतर है
  2. 0,123,
  3. हमेशा विकल्प 1
  4. के लिए जाने के भंडार वर्ग
+6

+1 बस इसमें जोड़ने के लिए - रिपोजिटरी पैटर्न का उपयोग करके अधिक स्पष्टता होती है - भंडार * जोड़ता है * उपयोगकर्ता, उपयोगकर्ता * स्वयं * जोड़ नहीं पाते हैं। – James

1

यह सख्ती से काम आप कर और अपने अनुप्रयोग के आकार पर पाने के लिए की जरूरत पर निर्भर करता है के लिए इन तरीकों जोड़ें। यदि आप कुछ तेजी से और कम स्केलेबल विकसित करना चाहते हैं तो आपको एन-स्तरीय प्रकार आर्किटेक्चर का उपयोग करने की आवश्यकता नहीं है (मेरा मतलब है कि आपके डेटा acces परत पर अपने डेटा इंटरैक्शन अलग करें)।

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

अंत में मैंने कहा कि प्रत्येक दृष्टिकोण एक उद्देश्य प्रदान करता है, बस जानें कि काम करने से पहले आपका उद्देश्य क्या है।

चीयर्स।

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