2009-12-02 10 views
7

हम डब्लूएसएसएफ का उपयोग कर डब्ल्यूसीएफ वेब सेवा का निर्माण कर रहे हैं। विचार यह है कि यह सेवा के माध्यम से हमारे मुख्य डेटाबेस का पर्दाफाश करेगा और हमें सेवा के शीर्ष पर विभिन्न अनुप्रयोगों और वेबसाइटों का निर्माण करने की अनुमति देगा। फिलहाल मैं एक साधारण क्लाइंट ऐप बना रहा हूं जो इस सेवा से कुछ डेटा डाउनलोड करेगा, इसे मैनिपुलेट करेगा, फिर इसे उपयोगकर्ता को रिपोर्ट CSV फ़ाइल के रूप में दें।डब्ल्यूसीएफ/क्लाइंट ऐप्स - व्यवसाय तर्क कहां जाना चाहिए?

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

दुर्भाग्य से मेरा मालिक सहमत नहीं है। वह "चिंताओं को अलग करना" चाहता है और कहा कि इस तर्क के लिए सही जगह ग्राहक सेवा के बजाय ग्राहक ऐप के अंदर एक व्यावसायिक परत में होगी। मुझे लगता है कि यह आसान हो सकता है लेकिन मैं इस कोड को लिखने के लिए सेवा व्यवसाय परत के अंदर अपने शक्तिशाली ऑब्जेक्ट मॉडल का उपयोग करना चाहता हूं। सेवा द्वारा उजागर की गई वस्तुएं "वास्तविक" वस्तुएं नहीं हैं और सेवा व्यवसाय परत के अंदर मौजूद पूर्ण ऑब्जेक्ट मॉडल की शक्ति के बिना वास्तव में केवल हल्के वजन डेटा संरचनाएं हैं।

आप क्या सोचते हैं? सहायता के लिए बहुत - बहुत धन्यवाद।

चीयर्स मार्क

+4

उससे पूछें: यदि हमें किसी अन्य ग्राहक की आवश्यकता है, तो क्या हमें सभी व्यावसायिक तर्कों को डुप्लिकेट करना चाहिए, या केंद्रीकृत संस्करण का उपयोग करना चाहिए? –

+2

@ रूबेन्स फरियास तर्क के साथ जारी है, यदि व्यापार तर्क को ठीक करने की आवश्यकता है और यह ग्राहक में रहता है, तो * सभी * ग्राहकों को अद्यतन करने की आवश्यकता है। यदि यह सेवा में है, तो केवल सेवा को अपडेट करना होगा। –

+0

प्रतिक्रियाओं के लिए धन्यवाद। हां, मुझे यह भी लगता है कि पुन: प्रयोज्यता शांत है। मुझे लगता है कि मुख्य नकारात्मक पक्ष यह है कि सेवा अद्यतन करने से सभी मौजूदा ग्राहकों को तोड़ दिया जा सकता है। –

उत्तर

0

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

आप अभी भी चिंताओं को अलग कर सकते हैं कि क्लाइंट या सर्वर पर व्यवसाय तर्क लागू किया गया है या नहीं। यह वह जगह नहीं है जहां आप प्रसंस्करण करते हैं, लेकिन आवेदन के स्तरों के बीच इंटरफेस को आपने कितनी साफ तरीके से डिजाइन किया है।

यह ग्राहक के बारे में अधिक जानने में मदद कर सकता है। क्या आप ब्राउज़र/जावास्क्रिप्ट क्लाइंट से काम कर रहे हैं? यदि ऐसा है तो मैं सर्वर पर जितना संभव हो उतना प्रसंस्करण रखूंगा और उस फ़ॉर्म में क्लाइंट को डेटा कम से कम भेज दूंगा जिसे आप प्रदर्शित करना चाहते हैं।

यदि यह एक सी # क्लाइंट है तो आपके पास उस अंत में काम करने के लिए बहुत अधिक शक्ति है। आप शायद डब्ल्यूसीएफ सेवा के जवाबों को उसी व्यावसायिक ऑब्जेक्ट क्लास में पुन: स्थापित कर सकते हैं जो आप सर्वर पक्ष पर उपयोग कर रहे थे और सर्वर पर आपके पास समान शक्ति प्राप्त कर सकते थे। (बस दो समाधानों के बीच व्यापार ऑब्जेक्ट क्लास साझा करें।)

+0

टिप्पणियों के लिए धन्यवाद। डब्ल्यूसीएफ वेब सेवा के इस विशेष उपयोग के लिए 2 क्लाइंट घटक होंगे। एक Asp.NET वेब ऐप और एक .NET विंडोज सेवा भी। इसका मतलब है कि ग्राहक अंत में बिजली की कोई कमी नहीं है। दरअसल ऐसा लगता है कि आप डब्ल्यूसीएफ वेब सेवा में मानक व्यावसायिक वस्तुओं (बचत() और मांगों पर लोड करने वाले गुणों आदि के साथ) का खुलासा नहीं कर सकते हैं। जिन वस्तुओं को यह खुलासा करता है वे "डेटा अनुबंध" नामक सरल डेटा संरचनाएं हैं। –

+0

डेटाकंट्रैक्ट/डेटामेम्बर सामान अनिवार्य रूप से ऑब्जेक्ट के लिए एक इंटरफ़ेस है जो निर्धारित करता है कि यह नेटवर्क पर कैसे भेजा जाता है। आप अभी भी सभी प्रकार के तरीकों को रख सकते हैं। विधियों को स्वयं आपके वेब सेवा अनुरोधों के माध्यम से नहीं भेजा जाता है, लेकिन वे कक्षा परिभाषा के हिस्से के रूप में दोनों सिरों पर होते हैं जब तक कि दोनों ऐप्स समान व्यावसायिक ऑब्जेक्ट लाइब्रेरी का उपयोग नहीं कर रहे हों। स्पष्ट रूप से कुछ ऑपरेशन जैसे सेव() केवल एक छोर पर हो सकता है या दूसरा (सर्वर पर सहेजें() होना चाहिए)। दूसरी ओर, क्लाइंट में क्लाइंटसेव() विधि हो सकती है जो सेवा की सहेजने वाली विधि को कॉल करती है। –

+0

यह बहुत दिलचस्प नाट है। मैंने उस संभावना पर विचार नहीं किया। मुझे लगता है कि यह एक दर्द सेवा परत वस्तुओं के लिए व्यापार परत वस्तुओं के लिए डेटा परत वस्तुओं से परिवर्तित हालांकि यह बेहतर हो सकता है व्यापार परत आदि के अंदर व्यापार वस्तुओं रखने के लिए ... –

0

इसके लिए कोई कठोर और तेज़ नियम नहीं है, लेकिन इस मामले में मैं कहूंगा कि आपका मालिक आपके से अधिक गलत है :) हर किसी के पास थोड़ा अलग होगा इस पर राय, और व्यावसायिक कारणों के अलावा अन्य जगहों पर आपका व्यावसायिक तर्क क्यों रखा जा सकता है, लेकिन क्लाइंट ऐप में इसे रखने का कोई कारण नहीं है - आप तर्क दे सकते हैं कि जब यह ग्राहक में होता है ऐप तो यह एक व्यापार नियम के बजाय एक यूआई या प्रेजेंटेशन नियम है।

यदि वेबसाइकिलों को कई अनुप्रयोगों द्वारा उपयोग किया जा रहा है, तो जितना संभव हो सके आप webservice पक्ष पर व्यवसाय तर्क चाहते हैं। मेरे पास वास्तव में बहुत पतली webservice परत होगी, यह सब कॉल स्वीकार कर लेता है और फिर वास्तविक व्यापार परत पर निष्पादन पास करता है। डेटाबेस डेटाबेस में नहीं, डेटाबेस परत में किए गए डेटाबेस डेटा और व्यावसायिक डेटा इकाइयों के बीच मैपिंग भी होगी।

+0

हाय Slugster हाँ कि वास्तुकला मैं हूँ का उपयोग करते हुए। डेटा लेयर एडीओ एंटिटी फ्रेमवर्क है और मुझे ऑब्जेक्ट फ्रेमवर्क ऑब्जेक्ट्स का उपयोग करके पॉप्युलेट किए गए ऑब्जेक्ट्स के साथ एक बिजनेस लेयर मिला है। इस परत में अधिकांश कोड शामिल हैं। डब्ल्यूसीएफ वेब सेवा परत WSSF (वेब ​​सेवा सॉफ्टवेयर फैक्टरी) का उपयोग करके बनाई गई है। यह परत सिर्फ व्यावसायिक वस्तुओं को डब्ल्यूसीएफ संदेशों में परिवर्तित करती है। –

7

मेरा वोट स्पष्ट होगा:

  • डेटाबेस
  • सेवा के सर्वर साइड पर एक व्यापार तर्क परत में किसी अन्य व्यवसाय तर्क चेकों डाल में डेटा अखंडता की जाँच के रूप में ज्यादा डाल
  • डाल केवल "फ़ील्ड की आवश्यकता" ग्राहक परत में आदि, बेहतर स्वचालित रूप से डेटाबेस मॉडल से निर्धारित करने या अपने व्यापार मॉडल की तरह सरल जांच

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

सर्वर पर व्यवसाय तर्क क्यों?
वही कारण अन्य उत्तरदाताओं ने उल्लेख किया है: केंद्रीकरण। आप केवल ग्राहक में व्यापार तर्क और अपने चेक नहीं चाहते हैं। क्या होगा यदि आपकी कंपनी या किसी तृतीय पक्ष के बाहरी सलाहकार में कोई अन्य विभाग अचानक आपकी सेवा का उपयोग करना शुरू कर देता है, लेकिन सभी सत्यापन और व्यावसायिक जांच जगह पर नहीं हैं, क्योंकि वे उनके बारे में नहीं जानते हैं ?? नहीं एक अच्छी बात है ...... ग्राहक में

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

+1

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

+0

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

+0

@MattC: हाँ, सच - यदि आपको कई ग्राहकों का समर्थन करने की आवश्यकता है, तो आपकी आवश्यकताओं को अलग-अलग हो सकता है। लेकिन मुझे अभी भी लगता है कि सर्वर पर सत्यापन नियमों के तीन, पांच अलग-अलग सेट होने के बावजूद दर्जनों या सैकड़ों ग्राहकों को अद्यतन करने के लिए प्रबंधन करना आसान है .... –

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