需求管理與技術選型實務避免過度工程化 應用需求驅動開發 RDD 策略降低技術低消成本

me
林彥成
2023-09-21 | 3 min.
文章目錄
  1. 1. 什麼是技術選型中的需求管理?
  2. 2. 需求管理:避免盲從與過度工程化
    1. 2.1. Redux Toolkit:簡化狀態管理的樣板程式
  3. 3. FAQ:需求管理常見問題
    1. 3.1. Q1:如何判斷一個技術是「真正需要」還是「盲目跟風」?
    2. 3.2. Q2:中小專案除了 Redux 還有什麼更好的狀態管理選擇?
    3. 3.3. Q3:過度工程化 (Over-engineering) 會帶來什麼長期後果?

什麼是技術選型中的需求管理?

技術選型中的需求管理 (Requirement Management) 是一種評估技術工具「必要性」與「成本效益」的決策過程。其核心在於打破「盲目跟風」的習慣,轉而以專案的實際痛點為導向。以 Redux 為例,雖然它提供了強大的單向資料流與偵錯工具,但同時也帶來了高昂的學習成本與樣板程式碼(Boilerplate)負擔。優質的需求管理要求開發者在決定採用新架構前,先自問:這個工具解決了什麼問題?它的「低消」是否超過了專案的承載能力?透過權衡 Redux Toolkit 的便利性與原生 Hooks 的簡潔性,開發者能有效避免「過度工程化」,讓系統保持輕量且高效。


在前兩篇文章簡單的談過物品的 分類管理,這篇文章想往更源頭的慾望討論,這就是所謂的 需求管理

大家都說需要就真的需要嗎?

需求管理:避免盲從與過度工程化

有天,小編突然就驚覺自己是不是太老了,在整理房間時發現畢業紀念冊真的有夠占空間,然後驚覺畢業後這 10-20 年一次都沒打開翻過。當初買它,是真正的需要,還是盲目的跟風?

在系統架構中,進行 技術選型 時,我們也常面臨同樣的困境:熱衷於採用最新的技術或添加多餘的功能,但這並不一定是必需的。是否有更簡單的方法達到目標?

小編年輕的時候也常常看大家說需要或覺得不錯就照著網路上的教學做下去,但沒考慮到應該要有自己思考和判斷的過程。當學習 React 的時候最常聽到的就是 Redux 架構,那我們就從這個角度切入來好好談一談 需求管理

首先,我們需要思考的是專案需要多複雜的 狀態管理

Redux 是用來管理全域的的狀態,統一定義了單向資料流的操作流程,還提供 time-travel debugging 這種走在潮流尖端的功能。

但是,這個好物在學習時會需要不只一些時間理解核心概念,例如 actions、reducers、store 等等,這會是開發上的基本消費。在一個小專案中,這個低消是否有點太高?

為了 狀態管理 定義了 actions、reducers、store 新觀念,導致專案中會重複的長出幾乎一模一樣的樣版程式。這也是隨著時間而出現 redux-api-middleware、Redux Toolkit 等等工具的原因。

Redux Toolkit:簡化狀態管理的樣板程式

透過 Redux Toolkit 等工具,可以有效減少並不需要的 SOP 和 boilerplate code,讓開發者能更專注於業務邏輯而非繁瑣的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
// Redux-act 範例
import { createStore } from "redux";
import { createAction, createReducer } from "redux-act";

const increment = createAction("increment the state");
const decrement = createAction("decrement the state");

const counterReducer = createReducer({
[increment]: (state) => state + 1,
[decrement]: (state) => state - 1,
}, 0);

const counterStore = createStore(counterReducer);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Redux Toolkit 現代化寫法
import { createSlice } from "@reduxjs/toolkit";

const counterSlice = createSlice({
name: "counter",
initialState: { value: 0 },
reducers: {
increment(state) { state.value++; },
decrement(state) { state.value--; },
},
});

export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;

所以大家都說需要就真的需要嗎? 人生可以簡單就不要複雜,狀態管理也是,小專案如果狀態簡單也沒有什麼 Debug 的困難用 useState、useReducer 就可以管理,殺雞焉用牛刀?! 但有一天狀態的量多到有點難以管理且需要追蹤時,Redux 這個強大工具的價值就會浮現,但不應該被視為所有專案的必要組成。

適度地採納新技術,不要過度依賴單一技術或過度擴展系統。


FAQ:需求管理常見問題

Q1:如何判斷一個技術是「真正需要」還是「盲目跟風」?

A:最好的方法是進行「痛點分析」。如果您的專案目前正深受「狀態難以追蹤」、「元件層級傳遞 Props 太深」所苦,那麼引入 Redux 是真正需要。如果只是因為「網路教學都這樣寫」,而您的專案只是幾個簡單的輸入表單,那就是盲目跟風。

Q2:中小專案除了 Redux 還有什麼更好的狀態管理選擇?

A:現代 React 開發中,ZustandRecoil 是非常優秀的輕量級選擇。它們的「低消」比 Redux 低得多,程式碼量少且直覺。對於極簡專案,原生的 Context API 搭配 useReducer 往往就綽綽有餘。

Q3:過度工程化 (Over-engineering) 會帶來什麼長期後果?

A:這會導致系統的「維護負擔」劇增。過多的樣板程式碼會掩蓋真正的業務邏輯,增加新進開發者的理解門檻,且在未來需要重構或變更需求時,因為架構太過沉重而舉步維艱。


記住,軟體開發的本質是解決問題。最優雅的解決方案往往是那個「剛好滿足需求」的選擇,而非最複雜的那一個!


喜歡這篇文章,請幫忙拍拍手喔 🤣