ฉันเป็นนักพัฒนาซอฟต์แวร์ระดับสูงที่เข้ารหัสใน Babel ES6 ส่วนหนึ่งของแอปของเราทำการเรียก API และตามแบบจำลองข้อมูลที่เราได้รับกลับมาจากการเรียก API ต้องกรอกแบบฟอร์มบางอย่าง
แบบฟอร์มเหล่านั้นจะถูกเก็บไว้ในรายการที่เชื่อมโยงเป็นสองเท่า (ถ้าส่วนหลังระบุว่าข้อมูลบางอย่างไม่ถูกต้องเราสามารถนำผู้ใช้กลับไปที่หน้าหนึ่งที่พวกเขาทำผิดพลาดได้อย่างรวดเร็วแล้วนำกลับมาที่เป้าหมาย รายการ.)
อย่างไรก็ตามมีฟังก์ชั่นมากมายที่ใช้ในการเพิ่มหน้าและฉันสงสัยว่าตัวเองฉลาดเกินไปหรือเปล่า นี่เป็นเพียงภาพรวมพื้นฐาน - อัลกอริทึมที่เกิดขึ้นจริงมีความซับซ้อนมากขึ้นโดยมีหน้าและประเภทหน้าเว็บที่แตกต่างกันมากมาย แต่นี่จะเป็นตัวอย่างให้คุณ
นี่คือวิธีที่ฉันคิดว่าโปรแกรมเมอร์มือใหม่จะจัดการกับมัน
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
}
นี่คือความกังวลของฉัน สำหรับฉันด้านล่างมีการจัดระเบียบมากขึ้น รหัสตัวเองแตกออกเป็นชิ้นเล็ก ๆ ที่สามารถทดสอบแยกได้ แต่ฉันคิดว่า: ถ้าฉันต้องอ่านว่าในฐานะนักพัฒนารุ่นเยาว์ที่ไม่คุ้นเคยกับแนวคิดเช่นการใช้ Identity functors, currying, หรือข้อความที่ประกอบไปด้วยสามคำฉันจะเข้าใจได้หรือไม่ว่าคำตอบหลังนั้นทำอะไร? จะดีกว่าไหมในการทำสิ่งที่ผิดพลาดง่ายขึ้น?
Babel ES6