Babel ES6’yı kodlayan bir Sr. Uygulamamızın bir kısmı API çağrısı yapar ve API çağrısından geri aldığımız veri modeline dayanarak, belirli formların doldurulması gerekir.
Bu formlar çift bağlantılı bir listede saklanır (arka uç verilerin bir kısmının geçersiz olduğunu söylerse, kullanıcıyı çabucak karıştırdıkları bir sayfaya geri getirebilir ve daha sonra hedefine geri getirebiliriz. liste.)
Her neyse, sayfa eklemek için kullanılan birçok fonksiyon var ve çok zeki olup olmadığımı merak ediyorum. Bu sadece temel bir bakış - gerçek algoritma, tonlarca farklı sayfa ve sayfa türüyle çok daha karmaşık, ancak bu size bir örnek verecek.
Bence acemi bir programcı başa çıkacaktı.
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;
}
Şimdi, daha test edilebilir olmak için, ifadeleri ayırıp ayrı hale getirdiklerinde, hepsini tek başıma yaptım ve sonra onların üzerinde haritalandırdım.
Şimdi, test edilebilir bir şey, ama okunabilir ve merak ediyorum burada işleri daha az okunabilir hale getirip getirmediğimi.
// 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
}
İşte benim endişem. To bana alt daha organize olduğunu. Kodun kendisi yalıtılmış olarak test edilebilen daha küçük parçalara bölünür. AMA Düşünüyorum: Eğer küçük bir geliştirici olarak, Kimlik işlevlerini kullanma, körleme veya üçlü ifadeleri kullanma gibi kavramları kullanmayanları okumak zorunda olsaydım, ikinci çözümün ne yaptığını bile anlayabilir miydim? İşleri bazen "yanlış, daha kolay" bir şekilde yapmak daha mı iyidir?
Babel ES6