關于Web開發中“程序=數據結構+算法”的思考
在這里統一說Web開發,可能有失頗偏,畢竟我后端一直都是用PHP實現的,沒用過.net也沒用過java,但我想大體都是一樣都,我就此闡述一下我所認為的“程序=數據結構+算法”。
輸入輸出思想
-
相對于前端程序來說,前端用戶的操作為輸入,然后經過邏輯處理后,把數據輸出到后端;
-
相對于后端程序來說,從數據庫取數據算做輸入,然后經過處理后,輸出到前端展示;
-
相對于數據庫來說,對于數據的操作指令為輸入,操作后產生的輸出結果為輸出(如刪除成功返回值,寫入成功后返回值等)
開發過程中的邏輯處理思想
-
后端輸出到前端展示邏輯
-
基于輸入輸出的思想:輸入(數據)+處理(算法)+輸出(數據);
-
數據由數據結構組成;
-
根據具體業務需求,確定輸出的數據結構;
-
如果確定的輸出數據結構過于復雜,拆分為單個簡單數據結構實現;
-
確定單個簡單數據結構的輸入源;
-
確定輸入源的數據結構;
-
用算法邏輯把輸入源轉化為輸出數據;
-
把單個簡單數據結構組裝為最終的復雜輸出數據結構;
-
前端遍歷輸出的內容,拆解數據做顯示。
-
前端輸入到后端的處理邏輯
-
確定后端需要存儲的數據結構;
-
把復雜的輸入數據結構拆分為簡單數據結構;
-
根據簡單數據結構,遍歷用戶輸入內容取得輸入數據組裝;
-
組裝簡單的輸入數據結構傳遞到后端;
-
后端拆解前端輸入的復雜數據結構為簡單數據結構;
-
遍歷單個復雜數據結構并存儲,且返回每個步驟的存儲結果,出錯做數據回滾;
-
把存儲結果返回。
-
其他思考
-
具體業務邏輯可能相對更復雜,一般get方式取數據對應的是后端的輸出邏輯思想,數據存儲對應的是前端輸入思想。
-
這套的想法主要目的是把復雜程序盡量做簡化,并以數據和算法的思想去思考程序本身。
-
另外一方面以數據拆解的思想盡量把復雜邏輯變簡單。
一些偽代碼示例
-
存儲示例
<?php
$input = $_post['input'];
// 拆分 start
$product = $input['product'];
$product_sku = $input['product_sku'];
// 拆分 end
// 存儲過程示例 start
$db = Db::beginTransation();
try {
$product_id = Product::save($product); // 單個存儲
ProductSku::save($product_sku,$product_id); // 單個存儲
$db->commit();
} catch(DbException $e) {
$db->rollBack(); // 出錯回滾
}
// 存儲過程示例 end
-
輸出示例
<?php
// 確定輸出數據結構 start
$result_data = [
'member' => [
'member_id' => 3,
'member_name' => '用戶名'
],
'order_list' => [
[
'order_id' => 1,
'order_sn' => '訂單號'
],
[
'order_id' => 1,
'order_sn' => '訂單號'
]
]
];
// 確定輸出數據結構 end
// 拆分數據結構處理 start
$member = Member::find()
-> select(['member_id','member_name'])
->asArray()
-> one();
$order_list = Order::find()
->select(['order_id','order_sn'])
->asArray()
->all();
foreach($order_list as &$item) {
$item['time'] = time(); // 對數據列表做其他處理
}
// 拆分數據結構處理 end
// 組裝數據并輸出 start
return [
'member' => $member,
'order_list' => $order_list
];
// 組裝數據并輸出 end
前端思想同樣如是,我就不做說明了。
來自:https://segmentfault.com/a/1190000008960415