• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            一定要堅(jiān)守的原則

            1、不能從算法和數(shù)據(jù)結(jié)構(gòu)的組織這個(gè)層面上考慮設(shè)計(jì),而應(yīng)該從從模塊和數(shù)據(jù)流的層面上考慮設(shè)計(jì)。把數(shù)據(jù)流搞清楚,按照需求,拆分成能夠完成需求的各自獨(dú)立的模塊,讓數(shù)據(jù)從起點(diǎn)到終點(diǎn)流動(dòng),被處理,最后得到結(jié)果。

                  比如:數(shù)據(jù)存儲(chǔ)模塊、價(jià)格發(fā)生器、價(jià)格過(guò)濾器、交叉盤價(jià)格合成器、價(jià)格發(fā)布器、視圖模塊;

            image

            2、根據(jù)數(shù)據(jù)流圖,拆分出來(lái)的獨(dú)立模塊,設(shè)計(jì)類;

            3、類的分別原則是:屬于流程不同模塊,即使功能相似或者相近,也不能合成一個(gè)類;

            4、一個(gè)類只做有限的事情,大而全的類雖然有可能是一種方案,但決不是最好的方案,它增加了耦合和復(fù)雜性,維護(hù)性也很低;

            5、類的實(shí)現(xiàn)部分,盡量不要直接調(diào)用類成員以外的數(shù)據(jù),比在類的函數(shù)中,直接對(duì)某個(gè)全局對(duì)象調(diào)用方法,這樣類函數(shù)執(zhí)行的前提是:這個(gè)全局對(duì)象必須存在,而這是一種耦合。解耦是簡(jiǎn)單的,那就是把這個(gè)全局對(duì)象作為類函數(shù)的參數(shù)傳入;

            6、類的方法接口,應(yīng)該只接受能夠完成類方法所需要的數(shù)據(jù),如果傳遞一個(gè)指針,這個(gè)指針包含的內(nèi)容,可能遠(yuǎn)遠(yuǎn)超過(guò)類方法所需要的;

            7、關(guān)于上一點(diǎn)的解決辦法是:構(gòu)建類需要參數(shù)的POD,不要怕轉(zhuǎn)換,不要怕生成臨時(shí)對(duì)象,事實(shí)上我需要這樣做。

             

            ===========================================================================================

            改進(jìn)后的版本

            1、界面視圖本來(lái)可以承擔(dān)控制器的作用,也就是MVC簡(jiǎn)化成MV。但是這樣就必須讓視圖來(lái)處理命令,試圖必須具備雙向的能力:即解析命令,并向下執(zhí)行同步到模型(數(shù)據(jù));根據(jù)模型(數(shù)據(jù)),同步視圖,向上更新界面;

            2、控制器和視圖集中在視圖里面,增加了視圖的復(fù)雜性,如果增加一個(gè)命令控制器,最終變成MVC,那么視圖就只需要具備向上更新UI的能力,向下執(zhí)行命令更改模型(數(shù)據(jù))的能力交給了命令控制器。這樣就實(shí)現(xiàn)了一上一下,各司其職的架構(gòu);

            3、形成視圖的經(jīng)常不只是一種數(shù)據(jù)流,往往多種數(shù)據(jù)流共同形成一個(gè)視圖:比如下面的結(jié)構(gòu)中,視圖是由:配置流,價(jià)格流,日志流三種組合而成的;

            4、增加命令控制器的作用的事顯而易見的,它讓業(yè)務(wù)控制的接口可以脫離視圖而存在。反過(guò)來(lái)理解,如果用視圖來(lái)同時(shí)充當(dāng)用戶命令接口,那么用戶命令接口存在的前提是視圖必須存在。而視圖是多變的,或者說(shuō)可以根本不存在,那么把用戶命令接口放在其中極其不合適。試想一下,一個(gè)項(xiàng)目它可以是個(gè)對(duì)話框,可以是個(gè)多文檔,也可以是個(gè)控制臺(tái),多變的界面,多變的視圖,但是用戶命令接口確實(shí)不便的,把用戶命令耦合到視圖的實(shí)現(xiàn)里面去,就不合適了;

            5、把命令控制器抽離出來(lái)的另一個(gè)好處是:集中管理用戶的命令,便于維護(hù)。試想一個(gè)如果對(duì)用戶命令的處理分散在若干個(gè).cpp文件,幾十個(gè)C***Dailog的On***Button()消息相應(yīng)函數(shù)里面,理解,調(diào)試,維護(hù)起來(lái),將是一件多為痛苦的事情;

            6、更多想寫的一句話,就是業(yè)務(wù)邏輯,不要和界面耦合起來(lái),界面需要做的就是:顯示視圖,接受用戶命令兩個(gè)功能,其他的都沒(méi)必要在界面里面存在。舉個(gè)例子,用得很多的MFC OnTimer()函數(shù),事實(shí)上定時(shí)操作應(yīng)該是業(yè)務(wù)邏輯的部分,放在界面里執(zhí)行就不合適了;

            7、檢測(cè)界面與業(yè)務(wù)邏輯耦合程度的一個(gè)標(biāo)志就是:把程序里界面代碼剝離后,業(yè)務(wù)邏輯依然完整,程序依然可以運(yùn)行。如上面所說(shuō)的,界面中處理OnTImer()函數(shù),則去掉界面代碼后,業(yè)務(wù)邏輯就不完整了,少了執(zhí)行定時(shí)業(yè)務(wù)處理的部分,這就是一中明顯的界面與業(yè)務(wù)邏輯耦合。

            image

            8、程序可以分為很多功能模塊,命令控制器能夠控制這些功能模塊的行為是應(yīng)該,這些功能模塊輸出信息到視圖里面也是應(yīng)該的。

             

            ===========================================================================================

            struct ViewResult
            {
                struct ViewSource
                {
                    char  symbol[12];
                    int        digits;
                    double minprice;
                    double minspread;
                    double peerminm;
                    BOOL    usepremium;
                    double premiumex;
                    char   session_current;
                    char    remark[256];
                    BOOL   session_enable;
                } view_source;
                struct ViewTrans
                {
                    BOOL   b_bid_success;
                    BOOL    b_ask_success;
                }view_trans;
                struct ViewPrice
                {
                    double bid;
                    double ask;
                }view_price;
            };

             

                BOOL UpdateViewSource(int index, const ViewResult::ViewSource& vs);
                BOOL UpdateViewTrans(int index, const ViewResult::ViewTrans& vt);
                BOOL UpdateViewPrice(int index, const ViewResult::ViewPrice& vp);
                BOOL UpdateViewMsg(const ViewMsg& vm);
            p

            posted on 2008-08-05 23:47 肥仔 閱讀(411) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 編程思想

            国内高清久久久久久| 久久99国产乱子伦精品免费| 久久久久亚洲精品无码蜜桃| 欧美一区二区久久精品| 国产精品久久久久乳精品爆| 亚洲国产成人久久精品影视| 国产午夜免费高清久久影院| 久久久久亚洲精品无码蜜桃| 久久久一本精品99久久精品88| 偷窥少妇久久久久久久久| 亚洲精品午夜国产va久久| 中文字幕久久精品| 久久精品国产2020| 色8久久人人97超碰香蕉987| 欧洲成人午夜精品无码区久久| 麻豆亚洲AV永久无码精品久久| 亚洲伊人久久大香线蕉综合图片| 亚洲午夜久久久影院| AV无码久久久久不卡网站下载| 久久精品国产第一区二区三区| 狠色狠色狠狠色综合久久| 青青草原综合久久大伊人精品| 国产精品青草久久久久福利99 | 久久精品国产亚洲精品2020| 亚洲午夜久久久久妓女影院| 精品久久久久久中文字幕人妻最新 | 一本色道久久HEZYO无码| 精品国产一区二区三区久久久狼| 1000部精品久久久久久久久| 亚洲国产成人久久精品99 | 精品人妻伦九区久久AAA片69 | 国产精品美女久久久久网| 久久免费线看线看| 无夜精品久久久久久| 久久精品国产亚洲AV电影| 久久精品免费大片国产大片| 性做久久久久久久久老女人| 久久精品国产99久久久| 久久久久久国产精品美女| 久久青青草原亚洲av无码app| 精品无码久久久久久国产|