저는 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
}
여기 내 관심사가 있습니다. 에 나 바닥이 더 조직이다. 코드 자체는 작은 테스트 단위로 분리되어 테스트 할 수 있습니다. 그러나 나는 생각하고있다 : 나는 신원 펑터, 카레 또는 삼진 진술을 사용하는 것과 같은 개념에 익숙하지 않은 주니어 개발자로서 그것을 읽어야한다면 후자의 해결책이 무엇을하는지 이해할 수 있을까? 때때로 "잘못되고 쉬운"방법을 사용하는 것이 더 낫습니까?
Babel ES6