Tôi là một dev-end dev, mã hóa trong Babel ES6. Một phần trong ứng dụng của chúng tôi thực hiện cuộc gọi API và dựa trên mô hình dữ liệu mà chúng tôi nhận được từ cuộc gọi API, một số biểu mẫu nhất định cần phải được điền vào.
Các biểu mẫu đó được lưu trữ trong một danh sách liên kết đôi (nếu phần cuối cho biết một số dữ liệu không hợp lệ, chúng tôi có thể nhanh chóng đưa người dùng quay lại một trang mà họ đã gửi nhầm và sau đó đưa chúng trở lại mục tiêu, chỉ bằng cách sửa đổi danh sách.)
Dù sao, có một loạt các chức năng được sử dụng để thêm các trang và tôi tự hỏi liệu tôi có quá thông minh không. Đây chỉ là một tổng quan cơ bản - thuật toán thực tế phức tạp hơn nhiều, với hàng tấn trang và loại trang khác nhau, nhưng điều này sẽ cho bạn một ví dụ.
Đây là cách tôi nghĩ, một lập trình viên mới sẽ xử lý nó.
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;
}
Bây giờ, để dễ kiểm chứng hơn, tôi đã lấy tất cả những câu lệnh đó và làm cho chúng tách rời nhau, hoạt động độc lập và sau đó tôi ánh xạ chúng.
Bây giờ, có thể kiểm tra là một điều, nhưng cũng có thể đọc được và tôi tự hỏi liệu tôi có làm cho mọi thứ trở nên ít đọc hơn ở đây không.
// 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
}
Đây là mối quan tâm của tôi. Đối với tôi phía dưới có tổ chức hơn. Bản thân mã được chia thành các phần nhỏ hơn có thể kiểm tra được trong sự cô lập. NHƯNG tôi đang nghĩ: Nếu tôi phải đọc rằng với tư cách là một nhà phát triển cơ sở, không được sử dụng các khái niệm như sử dụng chức năng nhận dạng danh tính, currying, hoặc các câu lệnh ternary, liệu tôi có thể hiểu giải pháp sau này đang làm gì không? Đôi khi làm những việc theo cách "sai, dễ dàng" hơn?
Babel ES6