Saya seorang Sr front-end dev, coding di Babel ES6. Bagian dari aplikasi kami melakukan panggilan API, dan berdasarkan model data yang kami dapatkan dari panggilan API, formulir tertentu perlu diisi.
Formulir-formulir itu disimpan dalam daftar yang ditautkan dua kali lipat (jika back-end mengatakan beberapa data tidak valid, kami dapat dengan cepat mendapatkan pengguna kembali ke satu halaman yang mereka buat berantakan dan kemudian membuatnya kembali sesuai target, hanya dengan memodifikasi) daftar.)
Pokoknya, ada banyak fungsi yang digunakan untuk menambahkan halaman, dan saya bertanya-tanya apakah saya terlalu pintar. Ini hanya gambaran umum dasar - algoritma yang sebenarnya jauh lebih kompleks, dengan banyak halaman dan tipe halaman yang berbeda, tetapi ini akan memberi Anda contoh.
Ini adalah bagaimana, saya pikir, seorang programmer pemula akan menanganinya.
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;
}
Sekarang, agar lebih dapat diuji, saya telah mengambil semua pernyataan if dan membuatnya terpisah, berdiri sendiri fungsinya, dan kemudian saya memetakannya.
Sekarang, dapat diuji adalah satu hal, tetapi juga dapat dibaca dan saya bertanya-tanya apakah saya membuat hal-hal yang kurang dapat dibaca di sini.
// 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
}
Inilah kekhawatiran saya. Bagi saya bagian bawah lebih teratur. Kode itu sendiri dipecah menjadi potongan-potongan kecil yang dapat diuji secara terpisah. TETAPI saya berpikir: Jika saya harus membacanya sebagai pengembang junior, tidak terbiasa dengan konsep-konsep seperti menggunakan fungsi Identitas, currying, atau pernyataan ternary, apakah saya dapat memahami apa yang dilakukan solusi terakhir? Apakah lebih baik melakukan sesuatu dengan cara yang "salah, lebih mudah" kadang-kadang?
Babel ES6