思考程序隔離和通訊

人們編程時很容易走到怎麼想怎麼作的過程式的思惟當中去, 可代碼不是
代碼須要的是抽象化和隔離, 一段代碼儘可能不依賴不相關的那些數據
或者說, 一段代碼應該保留儘量少的引用, 而且同時可以充分地完成工做
我挺喜歡的一個說法是, code is blind, 它只能觸碰到整個程序中身邊的一點點狀態
對於代碼進行隔離, 以及設計出良好的在隔離以後能協同工做的方案, 我認爲極爲重要編程

隔離的方案有:
* 閉包
* 類
* 文件做用域
* 另一個編程語言的環境設計模式

通訊的方案有:
* 直接引用
* 函數參數
* 全局的消息信道
* 取得輸入輸出的 channel 和 stream
* TCP Socket 等等外部的請求閉包

MVC 設計模式的各類變體, 就是隔離, 事件通知, 引用這些關聯不斷改變
好比 Flux 的數據流, 每一個部分主要接收前一個部分事件, 發送個下一個部分
這些架構的設計, 造成了模塊重用的方便, 也決定了反向的一些操做將會有限制
我沒能具體想清楚, 不過能夠確認這在各類系統當中都存在並且起到做用架構

使用腳本語言和麪向對象的咱們有個習慣是用引用數據來通訊
好比定義變量爲 true, 通過操做獲得 false, 其餘引用代碼就知道了狀態改變
函數式編程當中, 數據是不可變的, 意味着經過變量拿不到變量的狀態了
而代碼通訊的需求並不會減小, 因而就被迫引入新的編程手段.. 好比重建整個狀態..
狀態的代碼被整個重建, 可是沿用了變量名, 邏輯代碼不變, 所以正常工做
固然重建狀態意味着高階函數和內存回收之類技術需求明顯編程語言


相似的想法之前也寫過, 上邊是最近幾天想到的東西..
具體想得不夠清楚, 應該會有很多遺漏... 有興趣的同窗幫我升發一下吧..函數式編程

相關文章
相關標籤/搜索