在先前的一系列《雲研發:研發即代碼》文章裏,咱們介紹了軟件工程的代碼化閉環。同時,在《Water:雲研發架構模式》介紹了設計這樣的開發環境裏,咱們所須要的一些模式。今天呢,做爲這一系列的落地實踐,咱們將介紹雲研發 IDE的設計思想,以及如何實現,固然還有一點兒早期代碼:github.com/inherd/unco…。java
第一次聲明:這是一個概念性 IDE 的設計,暫不適合任何生產環境。git
在開始真正閱讀以前呢,爲了能更好地讓你們理解,咱們要回顧一下軟件工程行業:github
從整個行業而言,人們的關注點一直是如何提高技術生產力? 如今技術到了一個新的階段了,而需求的轉換大大限制了人們的開發速度。因而不管咱們的 DevOps 和雲開發實施得再好,也會陷入需求與技術隔離的瓶頸。這就是爲何咱們須要雲研發 理論體系 :),經過代碼化的方式,一站式解決需求到設計,再到代碼的問題。數據庫
對於雲研發理論來講,我已經設計好了理論基礎、軟件架構、開發模式,而且對其中的一系列東西進行了驗證,如:文檔代碼化、需求代碼化、代碼的代碼化 等。編程
咱們須要一個容器,把這些內容、模式、代碼整合到一塊兒,這就是 Uncode,一個概念性的雲研發 IDE。服務器
Uncode 是一個面向雲研發時代設計的下一代概念性 IDE。特性:markdown
簡單來講,你能夠在這個 IDE 上完成:需求的編寫,轉換需求爲設計,設計關聯代碼,禪模式編程,開發完便可上線。架構
與之相對比的是,傳統的一站式 DevOps 門戶,儘管你能夠經過跳轉來完成,可是沒法相互關聯和設計。與之相近的是 GitOps,即將應用系統的聲明性基礎架構和應用程序存放在 Git 版本庫中。可是它們都不閉環,也不完整。app
回到軟件開發上,咱們的軟件開發需求始於一個大特性或者史詩故事,這些故事會轉換爲一個 feature
,如 Cucumber 中的:框架
# author: Phodal HUANG
# status: doing
# language: zh-CN
功能: 第一個用戶故事
場景打開 Uncode
假如我在 Terminal 工具裏
當輸入 uncode
那麼則能在 Uncode IDE 裏打開當前項目
複製代碼
需求設計人員在這一步以前,將需求轉換爲了故事,故事與特性之間的關係記錄在這個 feature
中。開發人員從 IDE 中看到需求,標記了對應的狀態 status
,就能夠進入代碼的設計階段。
在設計這個階段,咱們先設計了 design
的三種類型:flow
、model
、ui
,對應於流設計、模型設計和 UI 設計。而咱們要在 Uncode 中實現的部分即是需求與模型、流和 UI 的綁定。圍繞模型,咱們還得構造統一的領域語言,用於自動化關聯接口與設計。從模式上來講,這個和無代碼/低代碼的開發是類似的。
惟一不一樣的是描述方式。使用領域特定語言來描述內容,咱們才能對系統進行合理地重構。
Linux/Unix下的哲學核心思想是『一切皆文件』。
在現今的開發環境之下,咱們在看板上挑選卡片,又或者是經過低代碼編輯器生成,使用的存儲介質都是數據庫。而數據庫這些東西並不存在於開發環境中,而是放置於遠程服務器上。這就形成了另一個痛點,沒法簡單反向關聯、需求與代碼隔離等等。
因而,做爲雲研發 IDE 的第二個模式,將全部的內容使用文件保存,而且使用版本管理工具(如 Git)進行管理。如咱們的需求以相似於代碼的形勢存儲在數據庫中,能夠實現如下特性:
沒錯,這就是一個區塊鏈系統。一旦需求發生了變化 ,你能夠即刻感知到。不過,一旦你的代碼與模型不相符合,你的代碼就沒法提交,或者模型被自動修改 :(。
做爲一個集成開發環境,現有的 一站式 DevOps 軟件研發管理協做平臺 都應該只被看成管理和展現用途。而從設計自己來講,一個 Dashboard 和一個開源工具,自己就分工。
咱們在代碼庫上有了需求,那麼咱們能夠藉助於 IDE:
咱們還能夠作一些不那麼正確的事情 ,如鎖定開發人員的修改範圍。
對於軟件架構師來講,人們常常有這麼一些痛點:
所以,回到 TypeFlow 的觀點上,咱們既然已經設計好了模型,設計好了輸入和輸出,那麼咱們必定能生成中間的方法及其返回值,併爲其設計一個 mock 的對象。如:
@RequestMapping("/")
String home() {
return "Hello, World!"
}
複製代碼
這種模式對於業務應用開發來講,很是易於實現 —— 生成綁定過程當中的各種函數等等。
選擇式編程。而一旦咱們在組織內的全部代碼都被索引以外,咱們有能力經過識別輸入和輸出,以及對應的方法名,就能在 IDE 中推薦對應的方法讓你選擇。
就這麼一看,咱們只須要搞好 IDE 的事情便可。然而, 並不是如此,咱們還要作的事情還有一些:
從開發層面來看,咱們一直在往復地浪費本地環境和線上開發環境,與此同時還有對應的測試運行時間、構建時間等。咱們須要一個於雲開發環境的機制。
加速聯調、測試過程。當咱們的本地環境上雲以後,一旦須要與其它系統對接時,全部的開發、測試效率將大大提高。譬如說,咱們的接口須要多提供一個參數,傳統模式以後,咱們要在本地運行,再經過流水線構建和部署。而如今,再也不須要這個過程了,只須要配置好 Gateway,輕輕鬆鬆進行開發。
加速環境搭建。咱們再也不須要在本地配置開發環境,只須要 1-click 就能夠在本地 IDE 裏直接調試。
市面上已經有一個勉強配合的概念:Nocalhost
對於需求、設計、開發、測試等的抽象,一直是我在去年研究的重點,它包含了:
即將這一系列的步驟轉換爲領域特定語言 —— 只有將流程、工具、行爲進行抽象,咱們才得以優化整個系統。
軟件開發是一項複雜的團隊活動。在一個系統裏,咱們要與大量的內、外部系統進行關聯。而爲了簡化開發人員的負擔,咱們須要提供一個新的 API 來將現有的 API 進行封裝。
如在現有的模式之下,爲了記錄一個日誌,咱們須要在依賴管理工具中引入對應的依賴,再添加至關的代碼。而全部的 API 都是在更新的,這一系列應該將由 IDE 自己來完成。在這種模式之下,咱們只須要輸入對應的 snippets
,便能完成這一系列的自動化過程操做。
最後,咱們仍是回到代碼上:github.com/inherd/unco…
我決定使用我設計的新架構設計套路來展現一上 Uncode IDE 的架構。因爲不肯定性較大,現有的系統是一種介於單體與微架構 + 模塊化的方式設計的,我想了想後來就稱之爲流體模式。一種在持續演進的過程當中,不斷進行不可預料地拆分架構單元的模式。
在驅動方式上,由四種模式構成:
同時系統的物理設計上,打算採用領域驅動的方式進行。
考慮到這是底層開發 + 系統編程,咱們:
依舊地,這個項目將繼續在 Inherd 小組上開發~~。
並不是徹底競爭關係,編碼這部分的功能,仍是這兩貨比較流行。Uncode 不會在前期造這方面的輪子,只是顯式地集成它們,或者被集成。
Uncode 優先解決 DevOps 的本地化,將其融入開發的開發過程的問題。
最後一次聲明:這是一個概念性 IDE 的設計,暫不適合任何生產環境。