<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    當柳上原的風吹向天際的時候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    在交易系統(tǒng)的客戶端中,涉及的業(yè)務種類有很多,如分類,商品,詢價,協(xié)商等大類及其下的CRUD四個小類,每種操作幾乎都需要一個界面供用戶操作,這些界面及其內(nèi)部處理如果安排不當會造成維護上的巨大麻煩,而且隨著程序的發(fā)展,界面表現(xiàn),用戶交互和數(shù)據(jù)處理都會而變得越來越復雜,如果不在一開始就對它們進行分開處理,最后只能導致不可維護的結(jié)果,屆時悔之晚矣。只有邁出了這堅實穩(wěn)固的一步,后面的成功才有可靠的保證。因此我采用了MVC2模式來將每個操作界面的界面表現(xiàn),用戶交互和數(shù)據(jù)處理三部分分離,目的是為了提高系統(tǒng)的可維護性和可擴展性。下面是對交易系統(tǒng)采用的MVC2模式的簡要介紹,以便于負責業(yè)務的程序員掌握之。

    一.MVC2模式的來源
       這種模式首見于網(wǎng)絡(luò)程序,起初因為Model無法通知到Web程序的界面而發(fā)明.這種模式采用Controller做中介者,一方面取得View的輸入,然后交由Model層處理,之后再把返回的數(shù)據(jù)傳遞到View。在Web程序(典型例子如Struts1)中各層任務如下:View接受用戶輸入,并在并傳遞到Controller;Controller統(tǒng)一進行處理命令,交由Model處理具體的業(yè)務;進過處理Model更新后,Controller會選一個View并把Model內(nèi)容傳遞(request,session)給它,然后View進行顯示.

    二.MVC2的優(yōu)缺點
       MVC2相對MVC1優(yōu)勢很明顯,首先Model和View無需繼承別的類,其次Model和View無需了解對方的存在,只需準備相應的接口而已,最主要的是,是進行了數(shù)據(jù)部分,視圖部分和控制部分三層的區(qū)分,程序的耦合度將大為降低,而可讀性和可修改性將隨之提高;缺點對于規(guī)模較小的程序或是組件,MVC2稍顯費事,有些過度設(shè)計的嫌疑。

    三.在客戶端程序中MVC各層擔負的職責

    視圖View:它擔任數(shù)據(jù)的顯示并接受用戶的輸入,其中不包括業(yè)務邏輯,但可以包含顯示邏輯。

    數(shù)據(jù)中心Model:它保存數(shù)據(jù)層和控制層所需要的數(shù)據(jù)并提供操作這些數(shù)據(jù)的方法。

    控制器Ctrl:它是一個中介者,負責實例化視圖和數(shù)據(jù)中心,由此View和Model并不需要知道對方的存在。View的事件在Ctrl中注冊,這樣當事件發(fā)生時Ctrl能調(diào)用Model取得相應的數(shù)據(jù)并顯示在View中。Ctrl中包含處理邏輯。

    下面的UML圖形可以參考:
    MVC2靜態(tài)類圖


    MVC2順序圖


    下面是最簡化的MVC三層次代碼示例:
    控制類
    public class Mvc2Ctrl {
        
    private Mvc2View view;
        
    private Mvc2Model model;
        
    public Mvc2Ctrl() {
            view 
    = new Mvc2View();
            model 
    = new Mvc2Model();
            handleEvents();
        }
        
    // 處理事件響應
        private void handleEvents() {
            addCloseLintener();
            addButtonListener();
            addButtonListener2();
        }
        
    // 窗體關(guān)閉事件相應
        private void addCloseLintener() {
            view.addWindowListener(
    new WindowAdapter() {
                
    public void windowClosing(WindowEvent e) {
                    System.out.println(
    "Exit MVC2");
                    System.exit(
    0);
                }
            });
        }
        
    private void addButtonListener() {
            view.getButton().addActionListener(
    new ActionListener() {
                
    public void actionPerformed(ActionEvent e) {
                    view.getLabel().setText(model.getText());
                }
            });
        }
        
        
    private void addButtonListener2() {
            view.getButton2().addActionListener(
    new ActionListener() {
                
    public void actionPerformed(ActionEvent e) {
                    view.getLabel2().setText(model.getText2());
                }
            });
        }
    }

    視圖類
    public class Mvc2View extends JFrame {
        
    private static final long serialVersionUID = 621145935910133202L;
        
    private JButton button;
        
    private JLabel label;
        
    private JButton button2;
        
    private JLabel label2;
        
    public Mvc2View() {
            locateView(
    300200);
            
    this.setTitle("MVC2 Program");
            setupComponents();
            
    this.setVisible(true);
        }
        
    // 定位程序在屏幕正中并設(shè)置程序大小
        private void locateView(int width, int height) {
            Dimension screenSize 
    = Toolkit.getDefaultToolkit().getScreenSize();
            
    this.setSize(width, height);
            
    this.setLocation(screenSize.width / 2 - width / 2, screenSize.height
                    
    / 2 - height / 2);
        }
        
    // 初始化內(nèi)部組件
        private void setupComponents() {
            button 
    = new JButton("點擊響應事件1");
            label 
    = new JLabel("  等待事件響應1");
            button2 
    = new JButton("點擊響應事件2");
            label2 
    = new JLabel("  等待事件響應2");
            setLayout(
    new GridLayout(22));
            add(button);
            add(label);
            add(button2);
            add(label2);
        }
        
    public JButton getButton() {
            
    return button;
        }
        
    public JButton getButton2() {
            
    return button2;
        }
        
    public JLabel getLabel() {
            
    return label;
        }
        
    public JLabel getLabel2() {
            
    return label2;
        }
    }
    模塊類
    public class Mvc2Model{
        
    public String getText(){
            
    return "  事件1響應完畢";
        }
        
        
    public String getText2(){
            
    return "  事件2響應完畢";
        }
    }

    小結(jié):
    一.越是大型程序,MVC越有必要;倒是小型程序不一定硬要遵守MVC。
    二.以上代碼抽象程度還不夠,理論上說,應該阻止程序員在界面中寫監(jiān)聽代碼。
    三.三部分應該實現(xiàn)相應的接口,這里是應該繼續(xù)進化的地方。

    posted on 2010-05-23 13:56 何楊 閱讀(299) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 国产成人亚洲精品无码AV大片| 精品久久久久亚洲| 免费被黄网站在观看| 国产AV无码专区亚洲AV蜜芽 | 日本h在线精品免费观看| 四虎亚洲精品高清在线观看| 免费一级毛片正在播放| 久别的草原电视剧免费观看| 亚洲AV女人18毛片水真多| 亚洲日韩激情无码一区| 免费看国产成年无码AV片| 国产精品久久久久免费a∨| 亚洲日韩在线中文字幕综合 | 中文字幕人成无码免费视频 | 2021在线永久免费视频| 另类专区另类专区亚洲| 亚洲国产第一页www| 可以免费观看一级毛片黄a| 精品一区二区三区免费毛片爱 | 免费鲁丝片一级观看| 99精品视频在线观看免费| 亚洲午夜无码久久| 久久香蕉国产线看观看亚洲片| 黄网址在线永久免费观看 | 2048亚洲精品国产| 亚洲高清中文字幕免费| 香蕉免费看一区二区三区| 亚洲一区二区三区高清在线观看| 亚洲av永久无码精品国产精品| 午夜两性色视频免费网站| 99在线观看免费视频| 精品国产呦系列在线观看免费| 国产亚洲精品成人AA片| 亚洲bt加勒比一区二区| 亚洲精品乱码久久久久久蜜桃 | 亚洲免费观看在线视频| 中文字幕一区二区三区免费视频| 亚洲欧美国产欧美色欲| 亚洲欧洲久久精品| 亚洲一区二区中文| 国产免费不卡视频|