जबकि इस पर विचार के कई स्कूल हैं, और निश्चित रूप से कोई भी तरीका सार्वभौमिक रूप से "सही तरीका" नहीं कहा जा सकता है, जबकि अन्य सभी सार्वभौमिक रूप से "गलत तरीके" हैं, सर्वर साइड पर व्यावसायिक तर्क को अलग करने के कई कारण हैं। , और उन वस्तुओं और सेवाओं को एक RESTful सेवा के माध्यम से एक्सेस करें।
संक्षिप्त उत्तर यह है कि यह ज्यादातर जोखिम प्रबंधन, और प्रदर्शन की निगरानी और सुधार के बारे में है।
विस्तार से:
नंबर 1 सर्वोपरि कारण सुरक्षा है। ग्राहकों को कचरा के अलावा कुछ भी सर्वर पर जमा करने के लिए विश्वसनीय नहीं होना चाहिए, और सुरक्षा पहलुओं को सर्वर पर रखकर, आप एक दुष्ट उपयोगकर्ता के संभावित जोखिम को अलग करते हैं जो आपके सिस्टम को नुकसान पहुंचाते हैं। याद रखें, जावास्क्रिप्ट पूरी तरह से क्लाइंट साइड है, और तुच्छ रूप से परिवर्तनशील है, इसलिए आप ऑउटपुट को पूरा नहीं कर सकते।
संख्या 2 का कारण चिंताओं का पृथक्करण है। आपके जावास्क्रिप्ट प्रोग्रामर सुरक्षा के विशेषज्ञ नहीं हो सकते हैं, और आपके सुरक्षा गुरु जावास्क्रिप्ट में बहुत अच्छे नहीं हो सकते हैं। व्यावसायिक तर्क को प्रस्तुति तर्क से अलग करने से, आप इन चिंताओं को पार करने से बचते हैं, क्योंकि जावास्क्रिप्ट को इसके अनुमति स्तरों से परे संसाधनों तक पहुंचने की अनुमति नहीं दी जाएगी, और त्रुटियां दी जाएंगी, जिनमें से संभालना स्क्रिप्ट प्रोग्रामर के नियंत्रण में है। इसी तरह, सुरक्षा आदमी जावास्क्रिप्ट को डिबगिंग नहीं करेगा यह देखने के लिए कि कैसे सुरक्षा बनाए रखी जाती है।
नंबर 3 कारण प्रदर्शन है। व्यापार तर्क संभवतः सर्वर और डेटाबेस संसाधनों की मांग कर सकता है। उस तर्क को अपने यूआई तत्वों से अलग करके, आप तब अपने आवेदन के उस हिस्से को माप सकते हैं, जिससे बाधाओं को दूर करना आसान हो जाता है। इसके अतिरिक्त, यह अलग करना बहुत आसान है कि कौन सी व्यावसायिक प्रक्रिया आपके सिस्टम या डेटाबेस को लोड कर रही है यदि सर्वर पर व्यावसायिक प्रक्रियाओं को निष्पादित किया जाता है।
यहां एक कोरोलरी यह है कि अक्सर कई व्यावसायिक प्रक्रियाएं समान डेटा का उपयोग करेंगी, और इसलिए आप समग्र सिस्टम लोड को कम करने के लिए सर्वर साइड पर कैशिंग को लागू कर सकते हैं जो क्लाइंट साइड कोड एक्सेस देने के लिए संभव / सुरक्षित नहीं हो सकता है।
अंत में, मैं प्रस्ताव करूंगा कि एसीआईडी मानकों को बनाए रखने के लिए, व्यापार तर्क को वास्तव में सर्वर पर होना चाहिए। मुझे याद है कि वेब ब्राउजर में चलने वाले बिलिंग उत्पाद को केवल सर्वर से डेटाबेस कनेक्शन के साथ रखा जाता है। यदि दैनिक बिलिंग (जो अच्छे दिन में एक घंटे या उससे अधिक का समय ले सकता है!) बाधित हो गया, तो कहें कि ब्राउज़र बंद या दुर्घटनाग्रस्त होने से, डेटाबेस से बनी गंदगी को छांटने में कई घंटे लग सकते हैं, जिसे छोड़ दिया गया था असंगत अवस्था में। याद रखें, इसमें क्रेडिट कार्ड भी शामिल थे, इसलिए बिलिंग रिकॉर्ड को प्रोसेसर के खिलाफ भी जांचना पड़ता था!
सर्वर साइड बिज़नेस लॉजिक ज्यादातर ACID अपडेट सुनिश्चित करने के लिए तुच्छ होता है, क्योंकि किसी भी भाषा के लिए किसी एप्लिकेशन या डेटाबेस स्तर पर लेनदेन को बनाए रखने के लिए कोई ढांचा होता है। यदि आप वेब क्लाइंट से कई अपडेट के माध्यम से ऐसा कर रहे हैं ... आप किसी बिंदु पर असंगत स्थिति प्राप्त करने जा रहे हैं, और यह संभवत: आपके एप्लिकेशन को प्रभावित करने वाला है।
हालांकि यह डेटाबेस तक पहुँचने के लिए रैस्टफुल सेवाओं के बारे में सोचने के लिए लुभावना हो सकता है, आपको इस फंदे में नहीं पड़ना चाहिए, क्योंकि यह आपदा का एक अच्छा नुस्खा है। RESTful सेवा के माध्यम से आप जिस ऑब्जेक्ट मॉडल को उजागर करते हैं, वह आपके डेटाबेस से संबंधित हो सकता है, लेकिन वास्तव में इसे CRUD इंजन के रूप में उपयोग करने के बजाय अपने व्यापार तर्क को एनकोड करना चाहिए।