Just My Life & My Work

同一專案開發多個品牌

工作上即將進行同一專案開發多個品牌,可以怎麼開始比較恰當,於是就跟夥伴阿遠分析主要可能的做法與其優劣。🤔

.

在更改一個程式碼專案來適應不同品牌時,選擇直接複製專案開發或是開分支修改都有其優缺點。哪種方式更適合取決於專案的維護策略、程式碼的複雜性和團隊的工作流程。

以下是這兩種方法的分析:

1. 複製整個專案開發

優點:

  • 清楚且獨立:每個品牌都擁有獨立的程式碼庫,不會相互干擾。修改其中一個品牌時,不用擔心影響其他版本。
  • 靈活性高:每個專案可以根據品牌需求進行大量的自定義變更,無需考慮與其他品牌的相容性。不同品牌的專案可以隨意添加或移除功能。

缺點:

  • 維護成本高:每次更新框架或是應用程式中的共享邏輯時,必須在每個品牌的程式碼庫中單獨進行修改和測試。這將大大增加工作量。
  • 重複程式碼:如果不同品牌的應用邏輯或大部分功能是相同的,那麼程式碼會有很多重複,導致程式碼管理不夠精簡。
  • 版本控制問題:多個品牌的應用分別存在於不同的程式碼庫中,難以在統一的版本控制系統下進行管理和追蹤。

.

2. 開分支修改

優點:

  • 降低重複程式碼:透過開發分支,可以共用核心邏輯、模組和元件,僅修改與品牌相關的 UI、資源和配置。這樣可以避免大量重複的程式碼。
  • 集中維護:核心功能或框架更新可以在主分支進行,然後將更新合併到各品牌的分支中,減少維護多個專案的負擔。
  • 靈活的協作:使用版本控制系統(如 Git),不同的開發者可以同時針對不同的品牌進行並行開發,並且合併回主分支時更容易追蹤更改。
  • 版本控制簡單:利用 Git 分支可以輕鬆管理多個品牌的不同版本。當核心程式碼更新時,可以輕鬆合併到不同的品牌分支。

缺點:

  • 合併衝突風險:當主分支和品牌分支之間的差異增加時,合併時可能會面臨衝突,特別是涉及 UI 或配置的部分。隨著時間推移,合併和分支管理的工作量可能增加。
  • 難以高度自定義:如果每個品牌之間的差異非常大(例如不同的功能、複雜的後端整合),分支管理可能不太適合,因為主分支和品牌分支之間的共用程式碼會越來越少,最終可能需要進行較多手動合併或分支重構。
  • 學習與操作成本:需要團隊對 Git 分支管理有良好的掌握,特別是處理衝突和管理多個活躍分支的情況。

適用場景

  1. 複製整份專案適合:
    • 品牌之間差異很大,不僅是 UI、顏色和文案的改變,還包括後端邏輯、功能和配置的重大變更。
    • 沒有長期維護需求,或者不常更新,只需一次性訂製不同的品牌應用。
    • 較小的專案,維護和開發人員數量有限,單人或小團隊負責時可能更傾向於獨立開發。
  2. 開分支適合:
    • 品牌之間的差異較小,僅限於外觀、顏色、文字的修改,功能邏輯基本一致。
    • 需要長期維護,並且核心邏輯會經常更新,需要在不同品牌應用中共用功能和修復。
    • 多人協作或團隊開發,有成熟的版本控制流程,並且需要更高的效率來維護多品牌。

結論

  • 如果預期未來的應用程式會持續進行功能更新,而且品牌間的差異不是很大,開分支可能是一個更好的選擇,因為它可以減少程式碼重複並降低維護成本。
  • 如果每個品牌之間的差異很大,且需要完全獨立的開發和維護流程,則複製專案會讓工作流程更清晰,也不會讓不同品牌的邏輯互相影響。🤠

.

除了以上兩種方式:開分支複製專案外,Flutter 專案還有哪些可行的做法?

1. 模組化架構(Modular Architecture)

概念:

將應用程式的核心邏輯、UI 元件和功能模組化,分成不同的獨立模組或 package。這些模組可以在不同的品牌應用中重複使用,而各品牌之間的差異部分則透過配置文件或額外模組來處理。

2. 多包專案(Multi-package Project)

概念:

使用 Flutter 的多包功能(Flutter packages),將應用程式分為多個 Dart 包。這類包可以是業務邏輯、UI 元件或數據管理。每個品牌擁有自己的包來實現差異化設計,而共用邏輯則存在於單獨的包中。

3. 使用 Flutter 的環境變量或編譯標誌(Flavoring with Flutter)

概念:

Flutter 支援透過配置不同的編譯環境變量(Flavors)來創建多個不同的應用版本。每個版本可以對應一個品牌。這種方式允許在同一個程式碼庫中根據不同的編譯標誌(如 dev, prod, brandA, brandB)來創建不同品牌的應用。

4. 使用 CI/CD 自動化創建(Continuous Integration/Continuous Deployment Automation)

概念:

透過 CI/CD 工具(如 GitLab CI、Jenkins、GitHub Actions 等)設置自動化創建管道,根據不同的分支或配置自動生成不同品牌的應用程式。

由於以上作法難度偏高,比如需要學習多元的工具與實行複雜的操作,除非確定未來會長期做此任務,不然暫且不展開討論。🙃

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲