摘要:在這里統(tǒng)一說(shuō)開(kāi)發(fā),可能有失頗偏,畢竟我后端一直都是用實(shí)現(xiàn)的,沒(méi)用過(guò)也沒(méi)用過(guò),但我想大體都是一樣都,我就此闡述一下我所認(rèn)為的程序數(shù)據(jù)結(jié)構(gòu)算法。這套的想法主要目的是把復(fù)雜程序盡量做簡(jiǎn)化,并以數(shù)據(jù)和算法的思想去思考程序本身。
在這里統(tǒng)一說(shuō)Web開(kāi)發(fā),可能有失頗偏,畢竟我后端一直都是用PHP實(shí)現(xiàn)的,沒(méi)用過(guò).net也沒(méi)用過(guò)java,但我想大體都是一樣都,我就此闡述一下我所認(rèn)為的“程序=數(shù)據(jù)結(jié)構(gòu)+算法”。
輸入輸出思想相對(duì)于前端程序來(lái)說(shuō),前端用戶的操作為輸入,然后經(jīng)過(guò)邏輯處理后,把數(shù)據(jù)輸出到后端;
相對(duì)于后端程序來(lái)說(shuō),從數(shù)據(jù)庫(kù)取數(shù)據(jù)算做輸入,然后經(jīng)過(guò)處理后,輸出到前端展示;
相對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),對(duì)于數(shù)據(jù)的操作指令為輸入,操作后產(chǎn)生的輸出結(jié)果為輸出(如刪除成功返回值,寫(xiě)入成功后返回值等)
開(kāi)發(fā)過(guò)程中的邏輯處理思想后端輸出到前端展示邏輯
基于輸入輸出的思想:輸入(數(shù)據(jù))+處理(算法)+輸出(數(shù)據(jù));
數(shù)據(jù)由數(shù)據(jù)結(jié)構(gòu)組成;
根據(jù)具體業(yè)務(wù)需求,確定輸出的數(shù)據(jù)結(jié)構(gòu);
如果確定的輸出數(shù)據(jù)結(jié)構(gòu)過(guò)于復(fù)雜,拆分為單個(gè)簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn);
確定單個(gè)簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)的輸入源;
確定輸入源的數(shù)據(jù)結(jié)構(gòu);
用算法邏輯把輸入源轉(zhuǎn)化為輸出數(shù)據(jù);
把單個(gè)簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)組裝為最終的復(fù)雜輸出數(shù)據(jù)結(jié)構(gòu);
前端遍歷輸出的內(nèi)容,拆解數(shù)據(jù)做顯示。
前端輸入到后端的處理邏輯
確定后端需要存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu);
把復(fù)雜的輸入數(shù)據(jù)結(jié)構(gòu)拆分為簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu);
根據(jù)簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu),遍歷用戶輸入內(nèi)容取得輸入數(shù)據(jù)組裝;
組裝簡(jiǎn)單的輸入數(shù)據(jù)結(jié)構(gòu)傳遞到后端;
后端拆解前端輸入的復(fù)雜數(shù)據(jù)結(jié)構(gòu)為簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu);
遍歷單個(gè)復(fù)雜數(shù)據(jù)結(jié)構(gòu)并存儲(chǔ),且返回每個(gè)步驟的存儲(chǔ)結(jié)果,出錯(cuò)做數(shù)據(jù)回滾;
把存儲(chǔ)結(jié)果返回。
其他思考
具體業(yè)務(wù)邏輯可能相對(duì)更復(fù)雜,一般get方式取數(shù)據(jù)對(duì)應(yīng)的是后端的輸出邏輯思想,數(shù)據(jù)存儲(chǔ)對(duì)應(yīng)的是前端輸入思想。
這套的想法主要目的是把復(fù)雜程序盡量做簡(jiǎn)化,并以數(shù)據(jù)和算法的思想去思考程序本身。
另外一方面以數(shù)據(jù)拆解的思想盡量把復(fù)雜邏輯變簡(jiǎn)單。
一些偽代碼示例存儲(chǔ)示例
commit(); } catch(DbException $e) { $db->rollBack(); // 出錯(cuò)回滾 } // 存儲(chǔ)過(guò)程示例 end
輸出示例
[ "member_id" => 3, "member_name" => "用戶名" ], "order_list" => [ [ "order_id" => 1, "order_sn" => "訂單號(hào)" ], [ "order_id" => 1, "order_sn" => "訂單號(hào)" ] ] ]; // 確定輸出數(shù)據(jù)結(jié)構(gòu) end // 拆分?jǐn)?shù)據(jù)結(jié)構(gòu)處理 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(); // 對(duì)數(shù)據(jù)列表做其他處理 } // 拆分?jǐn)?shù)據(jù)結(jié)構(gòu)處理 end // 組裝數(shù)據(jù)并輸出 start return [ "member" => $member, "order_list" => $order_list ]; // 組裝數(shù)據(jù)并輸出 end
前端思想同樣如是,我就不做說(shuō)明了。
這幾天 SF 增加了新的板塊——直播。我也收到了官方的邀請(qǐng)。4 月 7 日(本周五)晚 20:30 和大家一起聊聊項(xiàng)目中的一些總結(jié)。講座傳送: Yii2之RESTful程序基礎(chǔ)設(shè)計(jì)及目錄規(guī)劃
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/22658.html
摘要:在這里統(tǒng)一說(shuō)開(kāi)發(fā),可能有失頗偏,畢竟我后端一直都是用實(shí)現(xiàn)的,沒(méi)用過(guò)也沒(méi)用過(guò),但我想大體都是一樣都,我就此闡述一下我所認(rèn)為的程序數(shù)據(jù)結(jié)構(gòu)算法。這套的想法主要目的是把復(fù)雜程序盡量做簡(jiǎn)化,并以數(shù)據(jù)和算法的思想去思考程序本身。 在這里統(tǒng)一說(shuō)Web開(kāi)發(fā),可能有失頗偏,畢竟我后端一直都是用PHP實(shí)現(xiàn)的,沒(méi)用過(guò).net也沒(méi)用過(guò)java,但我想大體都是一樣都,我就此闡述一下我所認(rèn)為的程序=數(shù)據(jù)結(jié)構(gòu)+算...
摘要:新的數(shù)據(jù)表關(guān)系數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類似于這樣子大碼中碼小碼這個(gè)表結(jié)構(gòu)的說(shuō)明是避免對(duì)于關(guān)系鏈的數(shù)據(jù)邏輯不理解做的一個(gè)示例。 最近幾天一直在糾結(jié)于一個(gè)大數(shù)據(jù)批量導(dǎo)入的問(wèn)題,經(jīng)過(guò)幾天思考,發(fā)現(xiàn)基于小數(shù)據(jù)情況,原本的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)是沒(méi)有問(wèn)題的,但是在大量數(shù)據(jù)導(dǎo)入,問(wèn)題就很大了。我之前一直在強(qiáng)調(diào)程序=數(shù)據(jù)結(jié)構(gòu)+算法,但在這此卻鉆了牛角尖,最后去仔細(xì)看了之前別人設(shè)計(jì)的數(shù)據(jù)表才突然靈光一現(xiàn),發(fā)現(xiàn)了mysql...
閱讀 2040·2021-09-30 09:47
閱讀 715·2021-09-22 15:43
閱讀 1998·2019-08-30 15:52
閱讀 2446·2019-08-30 15:52
閱讀 2557·2019-08-30 15:44
閱讀 919·2019-08-30 11:10
閱讀 3380·2019-08-29 16:21
閱讀 3307·2019-08-29 12:19