हम वर्तमान में एनओटीओ और डीटीओ-मैपिंग कोड से छुटकारा पाने के लिए नॉकआउट से एंगुलर और ब्रीज़ में बदलाव का मूल्यांकन कर रहे हैं, जिसे हमने लिखा है (सर्वर और क्लाइंट साइड कोड)। हमने जो किया है वह डीएओ का पर्दाफाश नहीं करना था बल्कि सभी संस्थाओं के लिए डीटीओ बनाना था। अंत में क्या खुशी है, कि हमारे पास कई मामलों में (सभी नहीं) वर्ग थे जो 90% डेटाबेस ऑब्जेक्ट्स के समान दिखते थे। इससे हमें इस बात का पता चला कि हमारे मामले में डीटीओ समझ में नहीं आते हैं और हमने जो ओवरहेड लिया है वह बर्बाद प्रयास था और हमें इसे बेहतर दृष्टिकोण से छुटकारा पाने की जरूरत है। तो एक रिफैक्टरिंग दौर शुरू करना है :-)
चूंकि यहां हमारे पास एक ही स्थान पर दो विशेषज्ञ (@ जॉन और @ वार्ड) हैं, मैं इस सवाल का जवाब देने का मौका भी लेगा और इसके अलावा कार्यान्वयन से संबंधित एक को उठाऊंगा, जिसे मैंने अभी तक अपने लिए पूरी तरह से उत्तर नहीं दिया है और शायद जॉन और वार्ड इसे स्पष्ट कर सकते हैं, क्योंकि मुझे लगता है कि यदि डीटीओ की अभी भी आवश्यकता है तो यह सवाल का महत्वपूर्ण पक्ष पहलू है।
हवा को देखते हुए यह डीटीओ और डीटीओ-मैपिंग कोड का एक बहुत से बचने के लिए बहुत मदद की हो रहा है और मैं पूरी तरह से, तार हवा के साथ मिलकर कोई मतलब नहीं है पर कम प्राप्त करने के लिए DTOs की कि उपयोग सहमत कुछ है, क्योंकि है कि क्लाइंट साइड पर क्वेरी के साथ ऊपर बताए अनुसार हवा से पूरी तरह से संभाला जाता है। यह ऐसा कुछ है जिसे मैं पूरी तरह से पुष्टि कर सकता हूं और समझ में आता हूं। इसके अलावा हमने कई अलग-अलग डीटीओ कक्षाएं भी बनाई हैं, जो हमने नहीं किया है। ब्रीज़ बहुत कम कोड के साथ यह बेहतर है।
चिंताओं को अलग करने के लिए डीटीओ और डीटीओ मैपिंग कोड का उपयोग करने के लिए मुझे अभी भी एक अच्छा विचार और सिद्धांत है, लेकिन यह कई ओवरहेड के साथ आता है जो शायद कई मामलों में आवश्यक नहीं है। तो हवा का लाभ उठाने के लिए, आप निश्चित रूप से डीटीओ बना सकते हैं और ग्राहक पक्ष पर मेटाडेटा लिख सकते हैं/उत्पन्न कर सकते हैं, लेकिन यह हवा का मूल विचार नहीं है। आप इसे इस तरह से उपयोग कर सकते हैं, लेकिन जितना अधिक आप डीएओ पर रहते हैं, उतना ही कम कोड आपको लिखना होगा और तेज़ी से अपनी परियोजना को लिखना होगा। लेकिन फिर भी हवा आपको यह अनुमति देती है ताकि फ्रैमवर्क डीटीओ के साथ भी काम करे, यह सिर्फ बुनियादी विचार नहीं है कि हवा क्यों लिखी गई थी। दोनों का मिश्रण (डीएओ और डीटीओ का संपर्क) शायद सबसे अच्छा तरीका है।
लेकिन तब DTOs का उपयोग करते हैं?
- सुरक्षा
- परिसर तर्क (गणना) या जब आप यह है कि आप न नहीं या नहीं कर सकते हैं (सुरक्षा) ग्राहक के पक्ष सामने आ जाएगी क्योंकि बहुत अधिक जटिलता के सरल CRUD तरीकों का उपयोग करने में सक्षम नहीं हैं।
सुरक्षा के मामले में मैं वास्तव में 100% निश्चित नहीं हूं और इसलिए मैं यहां लिख रहा हूं और दो विशेषज्ञों से पूछना चाहता हूं। हम सर्वर पक्ष पर ईएफ का उपयोग कर रहे हैं और सुरक्षा के लिए सर्वर पक्ष पर अनुमानों का उपयोग करना शायद सबसे अच्छा विचार होगा। लेकिन यह कैसे करें?
मैं इस सवाल उठाना क्योंकि मैं सवाल का जवाब देने DTOs अभी भी जरूरत है, तो के सक्षम होने के लिए जवाब देने के लिए अपनी सबसे महत्वपूर्ण लगता है।
हम एफई के लिए निम्न कोड (हमारे मूल्यांकन के डेमो में) के साथ समाप्त हुआ:
private IQueryable<News> RestrictFields(IQueryable<News> query)
{
return query
.ToList() // This seemd to be needed, otherwhise I cannot use new News()
.Select(t => new News()
{
Id = t.Id,
Text = t.Text,
Title = t.Title,
Date = t.Date
})
.AsQueryable();
}
तो आप ऊपर देख सकते हैं, हम एक एफई क्वेरी की है। तो हमने पहले कोशिश की थी कि नए समाचार() के साथ एक प्रक्षेपण के लिए। यह काम नहीं करता है, क्योंकि ईएफ आपको प्रक्षेपण में डीडीओ ऑब्जेक्ट्स या अज्ञात लोगों में एक ही डीएओ कक्षा का उपयोग करने की अनुमति नहीं देता है। इसलिए हमने ToList() और फिर AsQueryable() के कामकाज का उपयोग किया। लेकिन यह सही नहीं लगता है और इसके अलावा शायद क्लाइंट से क्वेरी पैरामीटर डेटाबेस में नहीं भेजे जाते हैं और शायद कुछ इस वजह से काम नहीं करते हैं, जैसे "विस्तार"।
तो सुरक्षा कारण के लिए सर्वर साइड पर एक प्रक्षेपण करने के लिए है, तो अंत में वास्तव में DTOs के लिए जरूरत से छुटकारा पाने के लिए सबसे अच्छा तरीका क्या है? @ जॉन: मैं आप की एक पोस्ट को देखा, जहां आप कहते हैं, आप अपने प्रशिक्षण वर्ग (कोणीय और हवा) के लिए अपने प्रदर्शन परियोजना में वक्ताओं पर अनुमानों का इस्तेमाल किया है, लेकिन मैं जहां इस कार्यान्वित किया जाता है नहीं मिल cound।
यहाँ मैं वास्तव में अटक कर रहा हूँ और यह मेरे लिए पता करने के लिए DTOs अभी भी जरूरत है या नहीं कर रहे हैं, तो कड़ी, और कैसे यह तो हवा के साथ पूरी तरह से एक साथ काम कर सकते हैं।
मुझे आशा है कि मेरा उत्तर आपके प्रश्न का उत्तर देने में मदद करेगा और इसके अलावा मुझे उम्मीद है कि यह आपको हवा के उपयोग में कुछ महत्वपूर्ण लिंक के साथ जेक भी प्रदान करता है और यदि डीटीओ अभी भी आवश्यक हैं।
सधन्यवाद,
क्रिस
महान प्रश्न! डीटीओ के लिए flattening के लिए कोई ज़रूरत नहीं है। –
डीटीओ के आप संवेदनशील डेटा (उदा। मानव संसाधन तालिका में वेतन जानकारी) सुरक्षित करने के लिए चाहते हैं, तो उपयोग करने के लिए अच्छे हैं। – mikekidder
मेरे लिए डीटीओ का उपयोग करने का मुख्य कारण प्रस्तुति परत से डीएएल को कम करना है। ब्रीज़/ईएफ के साथ यह सीधे क्लाइंट को संस्थाओं को भेजने के लिए बहुत मोहक है क्योंकि बस बॉक्स से बाहर काम करता है। लेकिन decoupling के बिना, डेटाबेस संशोधन के लिए क्लाइंट-साइड जावास्क्रिप्ट तक कोड रिफैक्टरिंग की आवश्यकता हो सकती है। डरावना। –