# “讓程式去跑程式” 解決方案概念整理 --- ## 概觀 ### 問題背景 因應客戶對 “低代碼” 使用情境的需求 -- 像是動態新增自製模組,在客戶端以類似低代碼的方式,編輯程式流程的需求,和內部、外部開發客製化需求愈來愈明確的情形,本文提出程式碼結構 “可模組化” 的開發方式,與 “程式的程式” 可能的實作方向。 ### 讓程式去跑程式的概念 從程式語言層級、實作的角度來看,常見的方式有**動態模組**、**腳本定義檔案**、**腳本語言**等方式。 #### 動態模組的解決方案 如果要在既有的系統下,做出廣義上的低代碼功能,將會是 platform 等級的開發工作。 我們需要先打造一個 platform,讓這些模組去運行程式的程式。然後內部、外部開發,都透過模組來打造系統,例如 Android APK,和 launcher 、其他 App 的關係。 在既有的開發環境、產品環境,和技術人員的習慣下,最接近的技術解決方案是 OSGi。 #### 腳本定義檔案 指的則是利用格式化的純文字檔案 (並非程式語言),用 “人讀” 的方式 (不需要寫程式的使用者),編輯程式執行流程、用到的模組。主程式則會讀取、解析這些腳本定要檔案,並且執行對應的功能。 以目前開發和客戶團隊知道的技術來舉例,腳本定義檔案常見的格式,和實際的應用案例有 XML (套件管理工具 Maven)、JSON (Azure 平台部署設定),或是 YAML (Dockerfile)。 #### 腳本語言 如果有動態模組的需求,例如讓客戶也可以自己寫模組,較為適合的方式,則是使用腳本語言作為動態模組的實作方案。例如網通領域常見的 Lua,或是 serverless 的 Node.js、Python。 ### 客製化開發、二次開發 讓客戶自己寫模組,或是透過自己寫的模組,去使用核心模組、開發延伸功能。 ## 實作議題 ### 使用情境 以**腳本語言**解決方案為例: 1. 依照**規範**撰寫腳本語言 (shell scrip),儲存為文字記錄或是檔案 2. 使用程式語言*laod class/module from file/text*的方式,載入與執行程式的程式、模組 上述所說的**規範**,指的是腳本檔案的**模組**入口函式叫什麼名字、如何避免套件名稱衝突,還有參數怎麼傳送等等。 ### 腳本語言/動態模組的 ``handler`` 介面設計 除了功能開發,模組設計還有一個重點,就是 “讓別人知道我怎麼用,怎麼知道我有什麼功能”。這個別人可以是主程式、模組,或是其他模組。 如果參考 Web service 的術語,就是 well-known discopery。至於這個介面的設計,在 serverless 稱為 ``handler``,可以參考 [AWS serverless 範例程式](https://docs.aws.amazon.com/lambda/latest/dg/python-handler.html)。 ### 模組管理 再來則是模組版本、套件管理的設計,這包含了套件名稱、作者、權限等等。 ## 自製解決方案與現有 codebase 改造 ### 第二代解決方案 PoC (內部 demo) 動態語言版本、靜態語言版本 ... 略。 ### 第三方圖控、可視化工具整合 略。 ### 參考資料 * Dynamically-load-modules: https://www.geeksforgeeks.org/how-to-dynamically-load-modules-or-classes-in-python/ * Serverless example: https://newrelic.com/blog/best-practices/create-a-serverless-function-in-python
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up