本文就是 序篇 中的彩蛋, "💡 猜一猜複雜的業務邏輯應該怎麼處理", 快來了解一下吧😉html
GetArch源於一顆熱愛編程的 💕前端
Flutter 狀態管理五花八門, 各類"快速開發模板"也悄然流行起來,可是Dart軟件架構卻不多有人研究.
我認爲這可能與目前國內軟件廣泛採用先後端分離設計,讓App內部沒有太多業務邏輯, 亦或是Flutter開發者大多來自前端, 主要關注UI展現而對軟件架構不重視致使的.
隨着Serverless的崛起,藉助Flutter的跨平臺優點, 產品的業務邏輯重心將會逐步遠離服務器,轉移到我的設備上. 那麼爲軟件設計一個高內聚,低耦合,方便多人協同開發的架構相當重要.android
這並非說, 我的開發的獨立軟件就沒有考慮架構的必要.
軟件架構的意義就在於讓持續開發的成本最小化, 這也是業界 面向過程編程迅速被面向對象編程淘汰的根本緣由.git
站在巨人的肩膀上, 結合實際開發需求, GetArch從構思成爲現實.github
不少來自前端的開發者可能不太適應非UI代碼部分做爲程序的主體, 認爲這樣作是在"多此一舉".
我認爲, 是否引入架構, 應當從開發成本的角度考慮.
若是你的程序編寫完畢以後就無需添加新的功能, 而且應用功能獨特, 將來都沒有複用的需求, 那麼設計一個架構, 再區分各個模塊確實沒有必要, 能用就行. 強行引入架構, 徒增前期開發成本, 得不償失.
可是若是程序還須要持續維護, 那麼使用一個設計合理的架構, 以下降迭代開發成本, 仍是十分必要的.數據庫
GetArchCore徹底開源, 任何遵循GetArch架構設計, 實現GetArchCore中相應接口的App均可以成爲其餘App的一個模塊, 我但願可以有更多的人加入GetArch生態, 並讓更多的人從GetArch中獲益, 讓GetArch終結重複造無心義輪子的歷史.編程
GetArch —— Dart 軟件架構設計的終極解決方案後端
GetArch 宇宙 🌌服務器
將get_arch_core添加到yaml中, 實現對應的接口, 全部基於GetArch的程序都能成爲你的輪子!
GetArch宇宙歡迎你的加入😎網絡
GetArch 核心模塊, 全部使用GetArch架構的程序都依賴於GetArchCore.
快速開始基礎設施包, 裏面包含了 Http請求, Socket, 本地存儲, Dialog的基礎實現, 幫助使用者專一於App的業務邏輯功能
GetState是一個基於MVVM的狀態管理package.
GetState目前並不依賴於GetArchCore, 可是做爲GetState的做者, 我但願更多的人 嘗試使用GetState 😉
固然, 後續版本的GetState確定會加入GetArch生態, 以得到一致的使用體驗.
GetArch架構設計參考連接
軟件開發惟一的真理是「軟件必然修改」
軟件架構存在的意義就在於" 如何讓軟件適應需求變化的成本作到最低".
首先, 思考一個問題:
"做爲一個面向對象的應用軟件, 其最本質的, 最核心的東西是什麼?"
答案固然是"對象", 對象所擁有的屬性與動做, 構成了軟件的行爲, 經過各個對象之間的交互, 完成軟件設計時所要求的功能.
對象不依賴任何其餘事物, 是構成一個面向對象程序的最基本的要素.
有了對象, 程序還須要對外界不一樣的請求作出不一樣的迴應, 顯然, 用例(UseCase)只依賴於對象, 描述了對象的動做和各對象之間的交互, 沒有對象, 用例就沒有存在的意義.
用例不依賴除對象以外的任何其餘事物.
不管是鍵盤輸入, 語音輸入, 仍是從數據庫讀取, 從網絡訪問, 程序老是須要一個接口以輸入數據.
一樣的,不管是經過命令行打印, 仍是經過圖形界面繪製輸出, 程序老是須要一個方式向外界傳遞數據處理的結果.
做爲接口, 它必定不是具象化的, 就比如USB接口, 老是能夠接入各類符合USB標準的設備, 而不是隻爲某一種設備服務.
接口不依賴於對象和用例以外的其餘事物.
從抽象到具體, 從特定到普適. 對於程序而言, 最不重要的就是"數據從哪輸入", "數據輸出到哪"了.
例如一個"讀書App", 要實現"展現電子書"的功能, 那麼電子書是從數據庫讀取, 仍是從SD卡讀取, 抑或是從網絡下載, 這都不是軟件的根基, 若是說僅僅是由於要把一個本來只能從SD卡讀取電子書的軟件, 改形成可以從網絡下載電子書的軟件, 須要花費巨大的力氣重構的話, 那麼這個軟件的設計真的是糟糕透了.
基礎設施應該是一個軟件中替換成本最低的部分
GetArch 架構層次展現
以上目錄結構自上而下的順序對應相關層次的上下次序, 在IDE中目錄結構並不一致, 不要看錯了.😀
🌟這張圖可能就是本文最有價值的部分了, 注意觀察
本文是一篇介紹性的文章, GetArch使用教程將在後續的文章中講解, 敬請期待💖