2016-01-06 7 views
5

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

हमारे पास हमारे एप्लिकेशन में रीयल-टाइम अपडेट होने की आवश्यकता है जिसे डेटाबेस स्तर (नियंत्रक स्तर पर नहीं) पर ट्रैक किया जाना चाहिए।

हमने एसक्यूएल निर्भरता और सिग्नलआर का उपयोग हमारे समाधान के रूप में करने का विकल्प चुना है।

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

एकमात्र समाधान जो मैं सोच सकता हूं, परिवर्तनों को ट्रैक करने के लिए एसक्यूएल निर्भरता का उपयोग करना है, उन्हें कुछ तालिका/ऑब्जेक्ट में डंप करना है, फिर नियंत्रक से, बिज़ परत तक, डेटा परत तक लाने के लिए मतदान का उपयोग करना, और बैक अप

  • प्रश्न # 1: क्या कोई बेहतर समाधान है?
  • प्रश्न # 2: व्यापार परत तर्क शामिल करने का सबसे अच्छा समाधान क्या है, लेकिन फिर भी डेटा परत में परिवर्तनों को ट्रैक करने में सक्षम हो?
  • प्रश्न # 3: क्या यह मतदान के बिना संभव है?

उत्तर

0

SqlDependencyleaves आपके द्वारा ट्रैक किए गए डेटाबेस में ट्रैश और स्वयं के बाद सफाई नहीं करता है। इसका उपयोग करने से बचें! इसके बजाए ओपन-सोर्स एहसास का उपयोग करें - SqlDependencyEx। बदल डेटा जो आप ईवेंट हैंडलर की घटना args से प्राप्त कर सकते

// See constructor optional parameters to configure it according to your needs 
var listener = new SqlDependencyEx(connectionString, "YourDatabase", "YourTable"); 

// e.Data contains actual changed data in the XML format 
listener.TableChanged += (o, e) => Console.WriteLine("Your table was changed!"); 

// After you call the Start method you will receive table notifications with 
// the actual changed data in the XML format 
listener.Start(); 

// ... Your code is here 

// Don't forget to stop the listener somewhere! 
listener.Stop(); 
घटक आप ऊपर बताए भी ट्रैक कर सकते हैं वास्तविक साथ

: यह कॉन्फ़िगर करने के लिए बहुत आसान और इस्तेमाल होता है। उम्मीद है की यह मदद करेगा।

+0

यह मेरी समस्या का समाधान नहीं करता है क्योंकि इस प्रकार का कोड/तर्क व्यावसायिक स्तर पर नहीं होना चाहिए। व्यापार स्तर को स्कीमा से जुड़े किसी भी चीज़ से अवगत नहीं होना चाहिए और केवल डीटीओ पर काम करना चाहिए। – mtsuggs

+0

किस अंत तक? तो आप वापस बैठ सकते हैं और प्रशंसा कर सकते हैं कि आपने समाधान की कीमत पर 3 स्तरीय अवधारणा को बनाए रखा है? हम समस्याओं को हल करने के लिए इन उपकरणों का उपयोग करते हैं। डिजाइन की पैटर्न के नवीनतम विचार को फिट करने के लिए हर समस्या नहीं है, हम सभी को इस दशक को पसंद है। आपके पास समाधान है, इसलिए आप अपने कंट्रोलर और बिजनेस लेयर को थोड़ा सा धुंधला करते हैं। बड़ी बात। केवल प्रत्यक्ष डेटा पहुंच से दृश्य या अंतिम उपयोगकर्ता को रखें और आप अभी भी सुनहरे हैं। – Jason

1

आपकी डेटा परत डेटाबेस द्वारा उठाए गए ईवेंट को पकड़ रही है। क्या यह डेटा उपयुक्त डीटीओ में मैप करें, फिर बिजनेस लेयर द्वारा पकड़े जाने के लिए एक ईवेंट बढ़ाएं। बिजनेस लेयर फिर व्यू लेयर में एक इवेंट बढ़ा सकता है, जो सिग्नलआर ब्रॉडकास्ट() कर सकता है। बुलबुला उठना!

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