亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在Eclipse中擴展RefactoringWizard 框架

2019-11-18 13:02:13
字體:
來源:轉載
供稿:網友

  擴展RefactoringWizard 框架
  

  Eclipse中的RefactoringWizard框架擴展了Eclipse的Wizard框架,關于Wizard框架的介紹可以在Eclipse的幫助系統中找到,這里我們僅從OO設計和架構的角度探討一下RefactoringWizard框架。
  
  我們從Wizard相關的幾個類開始:
  
  1. WizardPage類
  
  WizardPage是一個包含了多個界面元素(比如文本框Text,按鈕Button)的一個界面組合部分。各個Page之間是獨立的,是可以動態加載的。WizardPage類的職責有:
  
  ·組合SWT界面元素,構造出一個界面頁。
  
  ·定義本身界面元素的操作行為。
  
  在RefactoringWizard框架中預設了兩個通用的屬性頁:PReviewWizardPage和ErrorWizardPage。PreviewWizardPage類是用來預覽重構后的修改,對比代碼或其他資源的變化。ErrorWizardPage類是用來處理條件檢查及錯誤狀態通知的。我們只需擴展RefactoringWizard框架就可以自動獲取這兩項強大的功能。
  
  2. Wizard類
  
  一個Wizard就是一個裝載一系列WizardPage頁的容器,Wizard類的職責有:
  
  ·裝載一系列WizardPage,構造出一個復雜的界面。
  
  ·裝載領域類來處理具體業務邏輯。(在RefactoringWizard框架中這個類就是Refactoring類)
  
  維護WizardPage頁之間以及頁與領域類之間的數據傳遞和狀態共享。(在這里要補充一點,其實在具體RefactoringWizard框架的實現中有專門的類來分擔這部分職責。)
  
  我們的界面行為可以千變萬化(通過組合不同的WizardPage),而負責處理業務邏輯的領域類也可以獨立的變化,你可以隨意擴展Wizard的界面功能(-對擴展開放),而不用修改現有RefactoringWizard框架(-對修改封閉),這正是OO設計的最基本原則-OCP(Open-Close Principle)。
  
  3. WizardDialog類
  
  這個對話框類的主要職責是構造一個完整的GUI界面以及操作界面。它預設了一些按鈕(Back,Next,Finish,Cancel)等界面元素,它負責裝載Wizard類,操作時通過按鈕Back、Next來在多個WizardPage之間切換。
  
  下面我們給出RefactoringWizard框架的架構圖:
  
  
 在Eclipse中擴展RefactoringWizard 框架
  圖 5 Refactoring Wizard架構圖

  
  從圖 5中我們可以看到,假如我們把每一個WizardPage頁看作一項業務,那么Refactoring正是處理業務邏輯的控制中心,它封裝了所有對業務邏輯的處理,當然它可以在將處理任務委任出去。但請注重,它并不負責實現業務流程,也就是說各業務(各個Page界面)之間的邏輯順序關系不由它維護。
  
  RefactoringWizard框架充分考慮到了應用的可擴展性,它在SWT的MVC(模型-視圖-控制)元架構模式的基礎上,添加了一些新的架構元素。MVC模式促使業務邏輯與界面分離,界面與控制行為分離,而RefactoringWizard框架增強了界面本身分離的特性,它將一個完整的界面分拆成多個頁面,用戶可以動態組合這些頁面或添加新的頁面來擴展界面行為。這種特性-界面的動態組合,低耦合,高內聚,封裝良好的接口-讓我們領略到了OO設計的精髓。
  
  下面我們通過以下幾個步驟來擴展RefactoringWizard框架:
  
  ·擴展RefactoringWizardPage
  
  ·擴展RefactoringWizard
  
  ·啟動RefactoringWizard
  
  第一步,擴展RefactoringWizardPage:首先我們新建一個類AnnotationRefactoringWizardPage,它需要繼續UserInputWizardPage類(其父類是RefactoringWizardPage,而RefactoringWizardPage最終實現了IDialogPage接口)。接下來就是實現IDialogPage接口的createControl(…)方法,在這個方法里實現你的界面行為,比如我們例子中的TimeOut文本框,代碼清單如下:
  
  清單 14
  
  /**
  * create composite to add UI elements
  */
  public void createControl(Composite parent) {
  // define UI
  Composite composite = new Composite(parent, SWT.NONE);
  GridLayout lay = new GridLayout();
  lay.numColumns = 2;
  composite.setLayout(lay);
  
  BTnCheck = new Button(composite, SWT.CHECK);
  btnCheck.setText("Add timeout parameter");
  GridData gdBtnCheck = new GridData();
  gdBtnCheck.horizontalSpan = 2;
  gdBtnCheck.horizontalAlignment = GridData.FILL;
  btnCheck.setLayoutData(gdBtnCheck);
  
  labName = new Label(composite, SWT.WRAP);
  labName.setText("TimeOut:");
  GridData gdLabName = new GridData();
  gdLabName.horizontalAlignment = GridData.BEGINNING;
  gdLabName.grabExcessHorizontalSpace = true;
  labName.setLayoutData(gdLabName);
  
  txtTimeOut = new Text(composite, SWT.SINGLE SWT.BORDER);
  GridData gdTxtTimeOut = new GridData();
  gdTxtTimeOut.horizontalAlignment = GridData.END;
  gdLabName.grabExcessHorizontalSpace = true;
  txtTimeOut.setLayoutData(gdTxtTimeOut);
  txtTimeOut.setText("500");
  
  // init status
  labName.setEnabled(false);
  txtTimeOut.setEnabled(false);
  // add listener
  defineListener();
  
  // 將composite納入框架的控制
  setControl(composite);
  Dialog.applyDialogFont(composite);
  }
  
  在這里我們要非凡注重的一點是在定義完我們的界面元素后,需要將自定義的Composite納入框架的控制,就是這行代碼:"setControl(composite);"
  
  在我們處理完輸入數據檢查后進入下一頁面之前,我們需要設置頁面完成的狀態,以及傳遞輸入數據到領域類Refactoring。我們用以下代碼設置好頁面完成的狀態后,下個頁面ErrorWizardPage就會處理顯示邏輯:
  
  清單 15
  
  private void notifyStatus(boolean valid, String message) {
  //設置錯誤信息
  setErrorMessage(message);
  //設置頁面完成狀態
  setPageComplete(valid);
  }
  
  傳遞輸入數據通過以下代碼來處理:
  
  清單 16
  
  private void setRefactoring(boolean selection, String text) {
  AnnotationRefactoring refactoring = (AnnotationRefactoring) getRefactoring();
  refactoring.setNeedTimeout(true);
  if(selection) {
  refactoring.setTimeout(Integer.valueOf(txtTimeOut.getText()).intValue());
  }
  }
  
  其中getRefactoring()方法是繼續自RefactoringWizardPage的方法,由于我們的RefactoringWizard類裝載了RefactoringWizardPage和Refactoring類,這個方法是從RefactoringWizard類中獲得的,這里面用到了Observer設計模式。至此,我們完成RefactoringWizardPage的擴展。
  
  第二步,擴展RefactoringWizard:首先我們新建一個類AnnotationRefactoringWizard,它需要繼續RefactoringWizard類,這個類中我們只需要加載定義好的AnnotationRefactoringWizardPage類和AnnotationRefactoring類,當然復雜的處理已經有RefactoringWizard框架處理好了。下面我們在構造函數中加載Refactoring類:
  
  清單 17
  
  public AnnotationRefactoringWizard(Refactoring refactoring) {
  super(refactoring, WIZARD_BASED_USER_INTERFACE);
  }
  
  然后我們加載我們的AnnotationRefactoringWizardPage類,只需重載父類RefactoringWizard的addUserInputPages()方法就可以:
  
  清單 18
  
  protected void addUserInputPages() {
  page = new AnnotationRefactoringWizardPage("refactor annotation");
  addPage(page);
  }
  
  第三步,啟動RefactoringWizard。擴展好RefactoringWizard之后,就需要在用戶點擊菜單項或是按鈕時彈出這個對話框。RefactoringWizard最好使用RefactoringWizardOpenOperation類來打開(當然也可以用RefactoringWizardDialog)。RefactoringWizardOpenOperation首先進行重構的初始檢查,通過后才打開RefactoringWinzard對話框,否則就會打開錯誤對話框。前面完成創建插件工程時我們提到,彈出RefactoringWizard對話框的代碼應該放到響應菜單操作的類的run函數中。具體到本文工程中,就是把下面的代碼放到AnnotationManageAction的run函數中。這些代碼首先依次構造Refactoring和RefacoringWizard子類AnnotationRefactoring和AnnotationRefactoringWizard,并將AnnotationRefactoring的引用傳遞給AnnotationRefactoringWizard,然后用RefactoringWizardOpenOperation打開AnnotationRefactoringWizard,彈出向導對話框。
  
  清單 19
  
  public void run(IAction action) {
  Shell shell = window.getShell();
  
  AnnotationRefactoring refactor = new AnnotationRefactoring(select);
  AnnotationRefactoringWizard wizard = new AnnotationRefactoringWizard(refactor);
  RefactoringWizardOpenOperation op = new RefactoringWizardOpenOperation(wizard);
  try {
  op.run(shell, "Inserting @Override Annotation");
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  }
  
  小結
  
  在Eclipse中有效的利用重構能夠大大的減輕軟件開發人員的工作負擔,提高軟件的健壯性。然而,目前重構仍然處在一個工具缺乏的時代。以Eclipse為例,只有JDT提供的重構工具最為完善,而針對其他語言例如C++、Python等的開發環境,都缺乏對應的重構功能。 通過本文提供的方法,我們能夠有效的利用Eclipse中的重構框架創建新的重構,從而進一步提高已有開發環境的效率。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频一区| 亚洲国产欧美自拍| 亚洲成人网在线| 日韩精品视频中文在线观看| 日本国产一区二区三区| 91超碰caoporn97人人| 疯狂欧美牲乱大交777| 午夜精品在线视频| 国产日韩av在线播放| 日韩欧美黄色动漫| 国产v综合v亚洲欧美久久| 亚洲女同性videos| 精品国产一区二区在线| 国产精品亚洲网站| 国产一区二区三区久久精品| 91国产美女在线观看| 一区二区三区精品99久久| 亚洲一区二区自拍| 成人黄色片网站| 中文字幕久久久av一区| 亚洲码在线观看| 91色琪琪电影亚洲精品久久| 尤物精品国产第一福利三区| 一区二区成人av| 亚洲人a成www在线影院| 成人久久久久爱| 日韩不卡在线观看| 日韩av综合网| 国产精品夜间视频香蕉| 欧美成人午夜免费视在线看片| 播播国产欧美激情| 伦伦影院午夜日韩欧美限制| 精品亚洲va在线va天堂资源站| 免费91麻豆精品国产自产在线观看| 日韩日本欧美亚洲| 国产精品欧美一区二区三区奶水| 国内偷自视频区视频综合| 日韩三级成人av网| 色狠狠av一区二区三区香蕉蜜桃| 亚洲天堂男人的天堂| 欧美激情亚洲视频| 国产精品电影一区| 国产精品美腿一区在线看| 按摩亚洲人久久| 国产精品日韩专区| 国内偷自视频区视频综合| 国产精品手机播放| 日本韩国欧美精品大片卡二| 成人激情视频在线| 久久久久久国产精品三级玉女聊斋| 亚洲精品欧美一区二区三区| 亚洲欧美日韩网| 日韩电影在线观看中文字幕| 欧美激情在线一区| 91美女片黄在线观| 中文欧美日本在线资源| 国产精品美女www| 国产精品久久久久久久9999| 亚洲色图激情小说| 高清欧美电影在线| 亚洲美女性生活视频| 国产乱人伦真实精品视频| 午夜精品福利电影| 日韩美女在线观看一区| 日韩精品在线观看网站| 国产婷婷97碰碰久久人人蜜臀| 亚洲第一色中文字幕| 日韩电影免费在线观看中文字幕| 久久天天躁狠狠躁夜夜爽蜜月| 精品亚洲一区二区三区在线观看| 欧美性理论片在线观看片免费| 国产一区二区三区在线观看视频| 久久久久亚洲精品成人网小说| 97精品伊人久久久大香线蕉| 亚洲色图第一页| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久视频在线视频| 欧美丰满老妇厨房牲生活| 欧美中文字幕精品| 欧美性猛交xxxx偷拍洗澡| 国产精品丝袜久久久久久不卡| 欧美成人免费网| 国产欧美日韩丝袜精品一区| 91精品在线播放| 国产美女久久精品| 国产有码一区二区| 国产精品久久久久久久天堂| 国产成人小视频在线观看| 成人欧美一区二区三区黑人| 欧美夫妻性生活xx| 一区二区三区视频免费在线观看| 国产香蕉一区二区三区在线视频| 久久成人精品视频| 伊人精品在线观看| 91在线网站视频| 国产精品国内视频| 久久久久久久久亚洲| 亚洲无线码在线一区观看| 国产精品www网站| 久久99精品久久久久久琪琪| 亚洲欧美日韩国产成人| 亚洲成人黄色在线观看| 久久久久久久久久av| 国产成人短视频| 91国产在线精品| 午夜精品www| 日韩大陆欧美高清视频区| 日韩中文字幕亚洲| 91精品啪在线观看麻豆免费| 久久精品视频播放| 日本成熟性欧美| 欧美高清视频免费观看| 欧美电影在线观看高清| 日韩视频永久免费观看| 久久国产精品亚洲| 97超碰国产精品女人人人爽| 国产精品美女免费看| 色综合久久久888| 国产精品免费一区豆花| 92看片淫黄大片欧美看国产片| 中文字幕不卡av| 亚洲成人aaa| 久久久精品国产一区二区| 日韩a**站在线观看| 日韩精品亚洲视频| 国产亚洲精品激情久久| 亚洲自拍偷拍在线| 中文字幕在线日韩| 欧美国产高跟鞋裸体秀xxxhd| 亚洲欧美国产一区二区三区| 国产精品私拍pans大尺度在线| 亚洲国产欧美精品| 日韩欧美在线视频免费观看| 亚洲娇小xxxx欧美娇小| 欧美午夜久久久| 亚洲影视中文字幕| 久久免费在线观看| 日韩av在线网站| 亚洲成人av片在线观看| 欧美成人免费在线观看| 不卡av电影在线观看| 国产精品电影一区| 最近2019年中文视频免费在线观看| 国产精品久久久久久婷婷天堂| 中文字幕少妇一区二区三区| 欧美丰满少妇xxxx| 久久精品一偷一偷国产| 久久精品99无色码中文字幕| 欧洲成人在线观看| 日韩福利视频在线观看| 精品伊人久久97| 欧美孕妇孕交黑巨大网站| 日韩美女中文字幕| 亚洲欧美国产va在线影院| 色综合色综合久久综合频道88| 欧美一级高清免费| 亚洲一区二区三区777| 精品亚洲一区二区三区在线观看| 亚洲一区第一页| 久色乳综合思思在线视频| 岛国av一区二区三区| 欧美疯狂做受xxxx高潮| 热99久久精品| 欧美日韩国产va另类|