在這裏統一說Web開發,可能有失頗偏,畢竟我後端一直都是用PHP實現的,沒用過.net也沒用過java,但我想大致都是同樣都,我就此闡述一下我所認爲的「程序=數據結構+算法」。php
相對於前端程序來講,前端用戶的操做爲輸入,而後通過邏輯處理後,把數據輸出到後端;前端
相對於後端程序來講,從數據庫取數據算作輸入,而後通過處理後,輸出到前端展現;java
相對於數據庫來講,對於數據的操做指令爲輸入,操做後產生的輸出結果爲輸出(如刪除成功返回值,寫入成功後返回值等)算法
後端輸出到前端展現邏輯數據庫
基於輸入輸出的思想:輸入(數據)+處理(算法)+輸出(數據);segmentfault
數據由數據結構組成;後端
根據具體業務需求,肯定輸出的數據結構;數據結構
若是肯定的輸出數據結構過於複雜,拆分爲單個簡單數據結構實現;post
肯定單個簡單數據結構的輸入源;.net
肯定輸入源的數據結構;
用算法邏輯把輸入源轉化爲輸出數據;
把單個簡單數據結構組裝爲最終的複雜輸出數據結構;
前端遍歷輸出的內容,拆解數據作顯示。
前端輸入到後端的處理邏輯
肯定後端須要存儲的數據結構;
把複雜的輸入數據結構拆分爲簡單數據結構;
根據簡單數據結構,遍歷用戶輸入內容取得輸入數據組裝;
組裝簡單的輸入數據結構傳遞到後端;
後端拆解前端輸入的複雜數據結構爲簡單數據結構;
遍歷單個複雜數據結構並存儲,且返回每一個步驟的存儲結果,出錯作數據回滾;
把存儲結果返回。
其餘思考
具體業務邏輯可能相對更復雜,通常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
前端思想一樣如是,我就不作說明了。
這幾天 SF 增長了新的板塊——直播。我也收到了官方的邀請。4 月 7 日(本週五)晚 20:30 和你們一塊兒聊聊項目中的一些總結。講座傳送: Yii2之RESTful程序基礎設計及目錄規劃