Open WangShuXian6 opened 2 years ago
数据集属性绝不意味着存储业务数据。它们是 DOM API 的一部分。 而 DOM 一直处于应用程序规模中称为“视图”、“表示”、“UI”的那部分。它与您的应用程序的业务逻辑无关。 它的存在只是为了将这个逻辑的结果呈现给用户并从他们那里收集反馈
这严重违反了单一职责原则(SOLID 中的“S”)。 每次更改这些 UI 元素时,都存在业务逻辑发生潜在变化的风险。
componentDidMount() {
axios.get(‘/articles/’)
}
methods: {
calculateDiscount(){
// actual code that
// makes business-critical calculations
// for the price of the product
}
}
这违反了关注点分离原则
Store 只有一个职责:存储数据。它与业务逻辑无关 Store不关心您如何、从何处以及为什么获取数据。它只负责存储并明确地提供给 UI
将业务逻辑与
Flux/Redux/Vuex
或任何其他第三方解决方案结合在一起
React business logic
example UI 部分
// Presentational component const QuantitySelector = () => { const { onClickPlus, onClickMinus, state } = useQuantitySelector(); const { message, value } = state; return ( <div className="quantity-selector"> <button onClick={onClickMinus} className="button"> - </button> <div className="number">{value}</div> <button onClick={onClickPlus} className="button"> + </button> <div className="message">{message}</div> </div> ); };
export default QuantitySelector;
>业务逻辑部分
```tsx
import { useState } from "react";
// Business logic. Pure, testable, atomic functions
const increase = (prevValue, max) => {
return {
value: prevValue < max ? prevValue + 1 : prevValue,
message: prevValue < max ? "" : "Max!",
};
};
const decrease = (prevValue, min) => {
return {
value: prevValue > min ? prevValue - 1 : prevValue,
message: prevValue > min ? "" : "Min!",
};
};
// Implementation/framework logic. Encapsulating state and effects here
const useQuantitySelector = () => {
const [state, setState] = useState({
value: 0,
message: "",
});
const onClickPlus = () => {
setState(increase(state.value, 10));
};
const onClickMinus = () => {
setState(decrease(state.value, 0));
};
return { onClickPlus, onClickMinus, state };
};
export default useQuantitySelector;
前端业务逻辑
front business logic
风格指南 style guide
保持业务逻辑无依赖
UI 必须与业务规则分开