2009-08-10 14 views
5

सुनिश्चित नहीं है कि मेरे पास सही शब्दावली है, लेकिन मैं अपनी 3-स्तरीय प्रणाली को कैसे सेट अप करने के बारे में थोड़ा उलझन में हूं।डेटा एक्सेस लेयर और बिजनेस ऑब्जेक्ट्स

आइए कहें कि मेरे पास मेरे डीबी में उपयोगकर्ताओं की एक तालिका है।

मेरे डीएएल में, मेरे पास एक उपयोगकर्ता डीबी क्लास है जो संग्रहीत प्रोसेस को डीबी में डालने, अपडेट करने, हटाने के लिए कहती है। मेरे पास एक उपयोगकर्ता डिस्प्ले क्लास भी है जिसका उपयोग उपयोगकर्ता डीबी में ऑब्जेक्ट्स में लौटने और पास करने के लिए किया जाता है।

तो अब मुझे यकीन नहीं है कि यह मेरे व्यवसाय तर्क परत में इसका उपयोग कैसे करें। क्या मुझे उपयोगकर्ताओं के लिए एक और बीएलएल ऑब्जेक्ट क्लास चाहिए? यदि हां, तो क्या यह अनावश्यक नहीं होगा? या क्या मैं बस अपने बीएलएल में उपयोगकर्ता डिस्प्ले क्लास का उपयोग करता हूं?

उत्तर

3

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

आप किस तकनीक का उपयोग कर रहे हैं? ActiveRecord की तरह कुछ शायद आपको बहुत मदद कर सकता है।

2

आप आमतौर पर अपने बीएलएल में बिजनेस नियम लागू करेंगे। उदाहरण के लिए, आप नियमित कॉल सेंटर कर्मचारियों को नई सेवा पर 10% छूट देने की अनुमति दे सकते हैं लेकिन प्रबंधक को 20% छूट देने की अनुमति देते हैं।

// Pseodocode 
double Discount 
{ 
    set 
    { 
     if (value > 10% AND Employee Is Not Manager) then throw Exception 
     if (value > 20%) then throw Exception 
     discount = value; 
    } 
} 
0

आप डिजाइन निम्न का उपयोग कर सकते हैं:: डीबी इकाई परिवर्तित करने के लिए व्यापार इकाई है PL जबकि बीएल से डेटा भेजने:

DAL: 

namespace DAL.Repository 
{ 
    public class UsersRepository 
    { 
     public static IList GetUser(string UserId) 
     { 
      using(MyDBEntities context=new MyDBEntities()) 
      { 
       // it calls SP in DB thru EF to fetch data 
       //here you can also context.user to fetch data instead of SP 
       return context.GetUser(UserId).ToList(); 

      } 
     } 
    } 
} 
BLL 

namespace BLL 
{ 
    public class User 
    { 
     public static IList GetUser(string UserId) 
     { 
      return DAL.Repository.UserRepository.GetUser(UserId); 
     } 
    } 
} 
PL 

    ddlUser.DataTextField = "UserName"; 
    ddlUser.DataValueField = "UserId"; 
    ddlUser.DataSource= BLL.User.GetUser(string.Empty); 
    ddlUser.DataBind() 

नोट आप अपने BLL में व्यापार नियम ऐसा ही कुछ हो जाता है के लिए होता है यदि आप पीएल में डेटा को लूप करना चाहते हैं तो आवश्यक है।

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