2016-12-16 8 views
5

इसे राय आधारित टैग किया जा सकता है। लेकिन मैं मानक/सर्वोत्तम अभ्यास की तलाश में हूं। मैं एक कोणीय 2 अनुप्रयोग का निर्माण कर रहा हूं और मुझे इसे टेम्पलेट में दिखाने से पहले एपीआई से डेटा में हेरफेर करना होगा। उदाहरण के लिए, मेरी सेवा लग रहा है, तो जैसे:क्या कोणीय 2 में सेवाओं को डेटा मैनिपुलेशन तर्क या घटकों को रखना चाहिए?

getData(id: number): Observable<Data> { 
    return this.http 
     .get(this.url + '/' + id) 
     .map((res) => { 
     return res.json().data; 
     }); 
    } 

    prepareData(data) { 
    // manipulate and return the data 
    } 

और मेरे घटक पर, मैं इस तरह सेवा कह सकते हैं:

getData(id: number): void { 
    this.dataService.getData(id) 
     .subscribe((data: Data) => { 
     this.showData = this.dataService.prepareData(data) 
     }; 
    } 

लेकिन इस मानक दृष्टिकोण है? या prepareData फ़ंक्शन को इसके बजाय घटक में शामिल किया जाना चाहिए?

वाक्यांशों का एक और तरीका यह है कि, घटकों की तुलना में सेवा भारी होनी चाहिए या यह प्रकाश होना चाहिए और डेटा प्राप्त करने के लिए केवल एक इंटरफ़ेस के रूप में कार्य करना चाहिए?

उत्तर

6

सरल, सामान्य परिवर्तनों हर किसी (जैसे res => res.json().data के रूप में) की जरूरत है सेवा में जाना चाहिए होगा।

प्रस्तुति तर्क (जैसे data => data.user.firstName + ' ' + data.user.lastName) पर निर्भर दृश्य-विशिष्ट परिवर्तन आपके घटकों में जाना चाहिए।

सेवा प्रदान करने में सक्षम होना चाहिए, यह जानने के बिना कि क्या प्रदान किया जाएगा। घटक को यह जानने के बिना डेटा से कहां से प्रस्तुत करने में सक्षम होना चाहिए।

+1

आपकी आखिरी पंक्ति वास्तव में यह पहचानने में बहुत मदद करती है कि कहां जाना चाहिए। मेरी इच्छा है कि कोणीय दस्तावेज इसके बारे में थोड़ा और स्पष्ट हो। – Yathi

1

एन-परत आर्किटेक्चर परिप्रेक्ष्य से अपने कोणीय अनुप्रयोग के बारे में सोचें। डीआरवाई सिद्धांत और कम से कम कुछ ठोस बिंदुओं का सम्मान करें - इस मामले में आपकी सेवाओं में एस। एएसपी.नेट के वेबफॉर्म (मार्क कोड के साथ युग्मित) के बजाए व्यू-प्रस्तुतकर्ता जोड़े (जहां मॉडल कहीं और है) के रूप में "घटक" के बारे में सोचें।

दो बुनियादी संभावनाएं हैं जो आपके डिज़ाइन के विवरण को प्रभावित करती हैं - क्या आपका सेवा सर्वर एंडपॉइंट आपके दृश्य मॉडल से अवगत है या नहीं। कुछ टीम दृष्टिकोण लेते हैं, जहां आपके कोणीय अनुप्रयोग में थोड़ा परिवर्तन की आवश्यकता होती है, क्योंकि सर्वर-साइड मॉडल कोणीय दृश्य मॉडल के बहुत करीब हैं। उन मामलों में, जो कुछ भी दृश्य-विशिष्ट नहीं है, वह आपकी सेवा में होना ठीक है, दृश्य-विशिष्ट परिवर्तन घटक में ठीक है।

दूसरी तरफ, यदि आपको अपने कोणीय दृश्य मॉडल में अधिक सामान्य सेवा/सर्वर प्रतिक्रिया मैप करने की आवश्यकता है, तो आप इसे सेवा में नहीं करना चाहते हैं। न ही आप इस मॉडल को पुन: उपयोग करने की संभावना रखते हैं, यदि अन्य विचारों में इस मॉडल का पुन: उपयोग करने की संभावना है (इसे बिजनेस क्लास के रूप में सोचें, न केवल डीटीओ)। चूंकि मैपिंग में व्यावसायिक नियम शामिल हो सकते हैं, इसलिए आपके कोणीय अनुप्रयोग में समर्पित मॉडल और मैपर परत को अलग करना बेहतर है और सेवाओं और घटकों को DRY और "S" रखें। एक अलग मॉडल/व्यापार परत बनाना भी अच्छा है, क्योंकि यह वास्तव में बाद में UI फ्रेमवर्क को आसानी से बदलने में आपकी सहायता कर सकता है।

+0

क्या आप मुझे वीएम/मैपर परत के बारे में और बता सकते हैं? कोणीय दस्तावेज या उदाहरण के लिए कुछ लिंक अच्छा होगा। – Yathi

+0

यह कोणीय-विशिष्ट नहीं है, बल्कि ओओपी-प्रेरित अवधारणा है जो बड़े आवेदन में भुगतान करेगी (क्योंकि आप केंद्रीकृत और अपने व्यापार तर्क को "सत्य" वर्गों में विभाजित करेंगे)। [यह एक है] (https://medium.com/opinionated-angularjs/angular-model-objects-with-javascript-classes-2e6a067c73bc) आलेख जो स्पष्ट रूप से दृष्टिकोण का उल्लेख करता है। यहां एक मॉडल फैक्ट्री का एक अच्छा कार्यान्वयन है [(स्विमलेन/कोणीय-मॉडल-फैक्ट्री)] (https://github.com/swimlane/angular-model-factory) जो एक्सटेंशन के साथ एक शानदार आउट ऑफ़ द बॉक्स समाधान है यदि आवश्यक हो तो कस्टम वर्ग/मैपर प्लग करने के लिए अंक –

0

आप getData() में डेटा का उपयोग और वापसी कर सकते हैं। following- रूप

getData(id: number): Observable<Data> { 
    return this.http 
     .get(this.url + '/' + id) 
     .map((res) => { 
      let data= res.json().data; 
      return this.prepareData(data); 
     }); 
    } 

    prepareData(data) { 
    // manipulate and return the data 
    } 

मुझे आशा है कि यह तुम्हारी मदद करेगा अगर आप विशिष्ट हालत आप संक्षेप में वर्णन कर सकते हैं और मैं तुम्हारी मदद करेंगे आप अपने कोड लिख सकते हैं।

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