आपके पास एक प्रश्न में बहुत सारे प्रश्न हैं।
लिंक 2 एसक्यूएल सिर्फ एक ओआरएम प्रकार है, यदि आप उस मार्ग पर जा रहे हैं तो मैं इकाई ढांचे (माइक्रोसॉफ्ट के ओआरएम) को देखता हूं।
आइए स्तरित अनुप्रयोगों के बारे में बात करते हैं एक सा तरीका समझने में वस्तुओं को भरने के लिए मदद करने के लिए। आपका सामान्य डेटाबेस ऐप 3 परतों से बना है (कुछ कहते हैं 4 और डेटाबेस को खुद को एक परत के रूप में संदर्भित करते हैं, यह वास्तव में कोई फर्क नहीं पड़ता)।
तो अपने संचार BLL और दाल को BLL वार्ता करने के लिए यूआई वार्ता है: आप निम्नलिखित है। डीएएल कुछ डेटा बीएलएल को देता है जो बदले में इसे यूआई में पेश करता है। मुझे नहीं पता कि कौन आपको बताता है कि डेटासेट/टेबल खराब हैं ... सुनिश्चित करें कि एक पाठक तेज़ है लेकिन इसका मतलब यह नहीं है कि डेटाटेबल का उपयोग करना बुरा है।
मुझे आपको एक उदाहरण दें। एक साधारण वर्ग के रूप में अपने डीएएल के बारे में सोचना बंद करो। अलग-अलग वर्गों के पूरे फ़ोल्डर के रूप में डीएएल परत के बारे में सोचना शुरू करें। उन वर्गों में से एक एक स्थिर डीबी कक्षा है। यह स्थिर है क्योंकि आप एक डेटाबेस (ज्यादातर मामलों में) से निपट रहे हैं, इसलिए कक्षा को तुरंत चालू करने की आवश्यकता नहीं है। तो यह कुछ ऐसा दिखाई देगा:
public static class DB {
private static readonly string connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
private static readonly DbProviderFactory factory = DbProviderFactories.GetFactory(dataProvider);
public static int Update(string sql)
{
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
using (DbCommand command = factory.CreateCommand())
{
command.Connection = connection;
command.CommandText = sql;
connection.Open();
return command.ExecuteNonQuery();
}
}
}
public static DataTable GetDataTable(string sql)
{
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
using (DbCommand command = factory.CreateCommand())
{
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = sql;
using (DbDataAdapter adapter = factory.CreateDataAdapter())
{
adapter.SelectCommand = command;
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}
}
इनमें से कुछ dofactory वेबसाइट से लिया गया है। डिजाइन पैटर्न का उपयोग कैसे करें सीखने के लिए महान संसाधन। किसी भी तरह यह सिर्फ एक .class फ़ाइल है। अब आपको एक ग्राहक डीओ (एक ग्राहक डेटा एक्सेस ऑब्जेक्ट) कहने के लिए एक और की आवश्यकता है।
ठीक है तो आप अपने द्वारा बनाई गई डीबी कक्षा का उपयोग कैसे कर सकते हैं (अच्छी तरह से मैं स्पॉक्स के संयोजन का उपयोग करता हूं लेकिन इसे एक साधारण पोस्ट बनाने के लिए अब संग्रहित प्रक्रियाओं से बचने देता है)। अगर मुझे ग्राहकों को प्राप्त करने की ज़रूरत है तो मैं इसे परिभाषित कर सकता हूं:
public IList<Customer> GetCustomers()
{
StringBuilder sql = new StringBuilder();
sql.Append(" SELECT CustomerId, CompanyName, City, Country ");
sql.Append(" FROM Customer ");
DataTable dt = Db.GetDataTable(sql.ToString());
return MakeCustomers(dt);
}
याद रखें कि यह पूरी तरह से अलग है। क्लास फ़ाइल में है।ठीक है तो ग्राहकों को कैसे दिखता है:
private IList<Customer> MakeCustomers(DataTable dt)
{
IList<Customer> list = new List<Customer>();
foreach (DataRow row in dt.Rows)
list.Add(MakeCustomer(row));
return list;
}
तो मैं यहां क्या कर रहा हूं, मेरे पास ग्राहकों से भरा एक डाटाटेबल था। मैं datatable की प्रत्येक पंक्ति के माध्यम से लूप करने की जरूरत है और ग्राहक करें:
private Customer MakeCustomer(DataRow row)
{
int customerId = int.Parse(row["CustomerId"].ToString());
string company = row["CompanyName"].ToString();
string city = row["City"].ToString();
string country = row["Country"].ToString();
return new Customer(customerId, company, city, country);
}
तो यह ग्राहक new'd और एक ग्राहक सूची में संग्रहित है।
यह आपके डेटा एक्सेस लेयर का क्या एक छोटा सा उदाहरण है। डाटाबेस क्लास केवल डेटा स्ट्रिंग प्राप्त करने या डेटा टेबल प्राप्त करने के लिए कनेक्शन स्ट्रिंग और फ़ंक्शंस को स्टोर करता है या यहां तक कि आपके मामले में डेटा रीडर प्राप्त करता है (जो आप भी कर सकते हैं)। ग्राहक डीडीओ कक्षा केवल एक वर्ग है जो ग्राहक वस्तुओं से संबंधित है और एक आईसी कस्टमर इंटरफेस कह सकता है।
तो ग्राहक वर्ग कहां है? यह व्यापार परत के रूप में एक और फ़ोल्डर में हो सकता है, क्योंकि यह केवल एक व्यापार वस्तु है। यहां आप ग्राहक वर्ग के अंदर सत्यापन, और आवश्यक फ़ील्ड सेट कर सकते हैं।
आपके यूआई में डेटावेयर, डेटासेट या एसक्यूएल से संबंधित कुछ भी नहीं है। आपकी बिजनेस लेयर के पास इसके साथ कुछ लेना देना नहीं है (यह आपके व्यावसायिक ऑब्जेक्ट्स के पीछे कुछ नियम परिभाषित करता है)। आपका दाल बहुत लचीला हो सकता है (एसक्यूएल, ओरेकल, आदि के साथ काम कर सकता है) या एसक्यूएल सर्वर कहने तक सीमित हो सकता है यदि आप यही करने की योजना बना रहे हैं। अपने ऐप को ओवरकिल न करें। यदि आप एक एमएस लड़के हैं और केवल SQL सर्वर का उपयोग करने के लिए निश्चित हैं, तो किसी भी विक्रेता के साथ काम करने वाले अंतिम डीएएल को रोल करने का प्रयास करके अपनी नौकरी को मुश्किल न बनाएं। SQLCommand, SQLConnection, आदि का उपयोग करना ठीक है
आप ग्राहकों को एक साथ जोड़ने, ग्राहकों को बनाने, ग्राहक को एक ही विधि में क्यों नहीं जोड़ेंगे? – jpshook
@ डेवलपर - तो आपके पास एक बड़ा बदसूरत फ़ंक्शन होगा। आपको चिंताओं को अलग करने की जरूरत है ताकि आप किसी फ़ंक्शन को जटिल न करें। एक समारोह बस * एक * नौकरी/कार्य करना चाहिए। यदि मैं इसे सभी में डालता हूं, तो आप ग्राहकों को प्राप्त कर रहे होंगे, साथ ही ग्राहकों के माध्यम से लांचिंग/लूपिग करेंगे, साथ ही ग्राहक को स्थान आवंटित करके ग्राहक को नया कर सकते हैं, साथ ही ग्राहक ऑब्जेक्ट को मान असाइन कर सकते हैं और आखिर में ग्राहक को सूची में जोड़ सकते हैं। आप इसे सब एक में कर सकते हैं लेकिन यह आपके कार्य को जटिल बनाता है। मेरे उदाहरण में पठनीयता भी अधिक सरल है। – JonH
डीबी कक्षा में सही तरीके से अद्यतन विधि में पैरामीटर कैसे जोड़ेंगे? मुझे नहीं लगता, आप ऐसा करेंगे: डीबी। अद्यतन ("तालिका सेट उपयोगकर्ता नाम = '" + varusername + "' कहां x =" + varx + "); ... तो क्या आप एक SQLCommand के साथ पास करेंगे पैरामीटर या डिक्शनरी या की/वैल्यू सूची के साथ और अद्यतन विधि में sqlcommand का निर्माण करें। मुझे लगता है कि विधि की उपयोगिता को यथासंभव व्यापक/सामान्य माना जाता है। – Jesper