मैं सीनियर फ्रंट-एंड देव हूं, बैबल ईएस 6 में कोडिंग करता हूं। हमारे ऐप का एक हिस्सा एपीआई कॉल करता है, और डेटा मॉडल के आधार पर हम एपीआई कॉल से वापस आ जाते हैं, कुछ फॉर्म भरने की आवश्यकता होती है।
उन प्रपत्रों को एक दोहरी-लिंक की गई सूची में संग्रहीत किया जाता है (यदि बैक-एंड का कहना है कि कुछ डेटा अमान्य है, तो हम उपयोगकर्ता को तुरंत उस एक पेज पर वापस ला सकते हैं, जिसे उन्होंने गड़बड़ कर दिया था और फिर उन्हें लक्ष्य पर वापस ले लिया, बस संशोधित करके सूची।)
वैसे भी, पृष्ठों को जोड़ने के लिए उपयोग किए जाने वाले फ़ंक्शंस का एक समूह है, और मैं सोच रहा हूं कि क्या मैं बहुत चालाक हूं। यह सिर्फ एक बुनियादी अवलोकन है - वास्तविक एल्गोरिथ्म बहुत अधिक जटिल है, विभिन्न पृष्ठों और पृष्ठ प्रकारों के टन के साथ, लेकिन यह आपको एक उदाहरण देगा।
यह है, मुझे लगता है, एक नौसिखिया प्रोग्रामर इसे संभाल लेंगे।
export const addPages = (apiData) => {
let pagesList = new PagesList();
if(apiData.pages.foo){
pagesList.add('foo', apiData.pages.foo){
}
if (apiData.pages.arrayOfBars){
let bars = apiData.pages.arrayOfBars;
bars.forEach((bar) => {
pagesList.add(bar.name, bar.data);
})
}
if (apiData.pages.customBazes) {
let bazes = apiData.pages.customBazes;
bazes.forEach((baz) => {
pagesList.add(customBazParser(baz));
})
}
return pagesList;
}
अब, अधिक परीक्षण योग्य होने के लिए, मैंने उन सभी को लिया है यदि कथन और उन्हें अलग-अलग किया जाता है, अकेले कार्य करते हैं, और फिर मैं उन पर मैप करता हूं।
अब, परीक्षण करने योग्य एक चीज है, लेकिन इतना पठनीय है और मुझे आश्चर्य है कि अगर मैं चीजों को यहां कम पठनीय बना रहा हूं।
// file: '../util/functor.js'
export const Identity = (x) => ({
value: x,
map: (f) => Identity(f(x)),
})
// file 'addPages.js'
import { Identity } from '../util/functor';
export const parseFoo = (data) => (list) => {
list.add('foo', data);
}
export const parseBar = (data) => (list) => {
data.forEach((bar) => {
list.add(bar.name, bar.data)
});
return list;
}
export const parseBaz = (data) => (list) => {
data.forEach((baz) => {
list.add(customBazParser(baz));
})
return list;
}
export const addPages = (apiData) => {
let pagesList = new PagesList();
let { foo, arrayOfBars: bars, customBazes: bazes } = apiData.pages;
let pages = Identity(pagesList);
return pages.map(foo ? parseFoo(foo) : x => x)
.map(bars ? parseBar(bars) : x => x)
.map(bazes ? parseBaz(bazes) : x => x)
.value
}
यहां मेरी चिंता है। करने के लिए मुझे नीचे अधिक संगठित है। कोड ही छोटे टुकड़ों में टूट गया है जो अलगाव में परीक्षण योग्य हैं। लेकिन मैं सोच रहा हूँ: अगर मुझे एक जूनियर डेवलपर के रूप में पढ़ना था, तो आइडेंटिटी फंक्शनलर्स, क्यूरिंग, या टर्नरी स्टेटमेंट्स का उपयोग करने जैसी अवधारणाओं के लिए अप्रयुक्त है, क्या मैं यह भी समझ पाऊंगा कि बाद वाला समाधान क्या कर रहा है? क्या कभी-कभी चीजों को "गलत, आसान" तरीके से करना बेहतर होता है?
Babel ES6