我是一名高级前端开发人员,使用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;
}
现在,为了更具可测试性,我采用了所有这些if语句,并将它们分离为独立的函数,然后将它们映射。
现在,可测试是一回事,但可读性也是一回事,我想知道我是否在这里使事情变得不那么可读。
// 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函子,currying或三元语句之类的概念,我什至能够理解后者的解决方案在做什么?有时候以“错误,容易”的方式做事更好吗?
Babel ES6