`
baiguomeng
  • 浏览: 958480 次
文章分类
社区版块
存档分类
最新评论

重构代码--Extract Method

 
阅读更多

重构太经典了!
重构里面比较简单的又算是Extract Method,这是我的代码里的一个类,经过我Extract Method后,我自己是越看越喜欢:P
本来createControl方法看起来很晕得,重构够变得非常简单了,几乎不需要注释,每个方法名就是注释.
当然有时候Extract Method是很麻烦的,比如碰到很多其它外部变量时.
对于这个简单的例子,我的心得就是取个好的方法名!

/***//**
*
@authorRey
*/

publicclassAutoSqlDataSetPageextendsWizardPage...{

publicstaticfinalStringID="AutoSqlDataSetPage";

privatestaticfinalintOK=0;

privatestaticfinalintCANCEL=-1;

privateListtableList=null;

privateDataTableinitDataTable=null,resultDataTable=null;

privateTableViewerinitTableViewer=null,resultTableViewer=null;

privateString[]names=newString[]...{""};

publicAutoSqlDataSetPage()...{
super(ID);
}


privateintindex=1;//input

privateintclick=-1;

privateImageimage=null;

privateintWIDTH=40,HEIGHT=40;

privateCanvascanvas=null;

privateColumnMoveCommandcolumnMoveCommand=null;

publicvoidcreateControl(finalCompositeparent)...{

setTitle(
"AutoSqlDataSetWizard");
setMessage(
"XXXXXXXXXXXXXXXX",IMessageProvider.INFORMATION);

Compositecomposite
=newComposite(parent,SWT.NULL);
GridLayoutglayout
=newGridLayout(9,true);
composite.setLayout(glayout);

CompositemainBtnsComposite
=createMainBtnsComposite(composite);

ButtonmainBtnAdd
=createMainBtn(mainBtnsComposite,"Add");
ButtonmainBtnRemove
=createMainBtn(mainBtnsComposite,"Remove");
ButtonmainBtnProperties
=createMainBtn(mainBtnsComposite,"Properties");
ButtonmainBtnPreview
=createMainBtn(mainBtnsComposite,"Preview");

createSeparator(composite);

createImage(composite);
createCanvas(composite);

addListener2Canvas(parent);

TableinitTable
=createTable(composite);
initTableViewer
=newTableViewer(initTable);
initTableViewer.setContentProvider(
newColumnContentProvider());
initTableViewer.setLabelProvider(
newColumnLabelProvider());

CompositetableBtnsComposite
=createTableBtnsComposite(composite);

finalButtonadd=createTableBtn(tableBtnsComposite,">>");
finalButtonremove=createTableBtn(tableBtnsComposite,"<<");
finalButtonaddAll=createTableBtn(tableBtnsComposite,">>>");
finalButtonremoveAll=createTableBtn(tableBtnsComposite,"<<<");
finalButtonundo=createUndoAndRedoBtn(tableBtnsComposite,"undo");
finalButtonredo=createUndoAndRedoBtn(tableBtnsComposite,"redo");

TableresultTable
=createTable(composite);
resultTableViewer
=newTableViewer(resultTable);
resultTableViewer.setContentProvider(
newColumnContentProvider());
resultTableViewer.setLabelProvider(
newColumnLabelProvider());

/***//***********************************************************************
*MainBtns'SelectionListener
*********************************************************************
*/


addListener2MainBtnAdd(parent,mainBtnAdd);

/***//***********************************************************************
*TableandColumnBtns'SelectionListener
*********************************************************************
*/


addListener2AddBtn(add,undo,redo);

addListener2RemoveBtn(remove,undo,redo);

addListener2UndoBtn(undo);

addListener2RedoBtn(redo);

addListener2AddAllBtn(addAll,undo,redo);

addListener2RemoveAllBtn(removeAll,undo,redo);

setControl(composite);
setPageComplete(
true);
}


privateCompositecreateMainBtnsComposite(Compositecomposite)...{
GridLayoutglayout;
CompositemainBtnsComposite
=newComposite(composite,SWT.NULL);
GridDatagd
=newGridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan
=9;
mainBtnsComposite.setLayoutData(gd);
glayout
=newGridLayout(9,true);
mainBtnsComposite.setLayout(glayout);
returnmainBtnsComposite;
}


privateButtoncreateMainBtn(CompositemainBtnsComposite,Stringtext)...{
GridDatagd;
ButtonmainBtnAdd
=newButton(mainBtnsComposite,SWT.PUSH);
mainBtnAdd.setText(text);
gd
=newGridData(GridData.FILL_HORIZONTAL);
mainBtnAdd.setLayoutData(gd);
returnmainBtnAdd;
}


privatevoidcreateSeparator(Compositecomposite)...{
GridDatagd;
Labellabel
=newLabel(composite,SWT.SEPARATOR|SWT.HORIZONTAL);
gd
=newGridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan
=9;
label.setLayoutData(gd);
}


privatevoidcreateCanvas(Compositecomposite)...{
GridDatagd;
canvas
=newCanvas(composite,SWT.NO_REDRAW_RESIZE|SWT.V_SCROLL
|SWT.H_SCROLL);
gd
=newGridData(GridData.FILL_BOTH);
gd.horizontalSpan
=9;
canvas.setLayoutData(gd);
}


privatevoidaddListener2Canvas(finalCompositeparent)...{
finalPointorigin=newPoint(0,0);

finalScrollBarhBar=canvas.getHorizontalBar();
hBar.addListener(SWT.Selection,
newListener()...{
publicvoidhandleEvent(Evente)...{
inthSelection=hBar.getSelection();
intdestX=-hSelection-origin.x;
Rectanglerect
=image.getBounds();
canvas.scroll(destX,
0,0,0,rect.width,rect.height,false);
origin.x
=-hSelection;
}

}
);
finalScrollBarvBar=canvas.getVerticalBar();
vBar.addListener(SWT.Selection,
newListener()...{
publicvoidhandleEvent(Evente)...{
intvSelection=vBar.getSelection();
intdestY=-vSelection-origin.y;
Rectanglerect
=image.getBounds();
canvas.scroll(
0,destY,0,0,rect.width,rect.height,false);
origin.y
=-vSelection;
}

}
);
canvas.addListener(SWT.Resize,
newListener()...{
publicvoidhandleEvent(Evente)...{
Rectanglerect
=image.getBounds();
Rectangleclient
=canvas.getClientArea();
hBar.setMaximum(rect.width);
vBar.setMaximum(rect.height);
hBar.setThumb(Math.min(rect.width,client.width));
vBar.setThumb(Math.min(rect.height,client.height));
inthPage=rect.width-client.width;
intvPage=rect.height-client.height;
inthSelection=hBar.getSelection();
intvSelection=vBar.getSelection();
if(hSelection>=hPage)...{
if(hPage<=0)
hSelection
=0;
origin.x
=-hSelection;
}

if(vSelection>=vPage)...{
if(vPage<=0)
vSelection
=0;
origin.y
=-vSelection;
}

canvas.redraw();
}

}
);
canvas.addListener(SWT.Paint,
newListener()...{
publicvoidhandleEvent(Evente)...{
GCgc
=e.gc;
gc.drawImage(image,origin.x,origin.y);
Rectanglerect
=image.getBounds();
Rectangleclient
=canvas.getClientArea();
intmarginWidth=client.width-rect.width;
if(marginWidth>0)...{
gc.fillRectangle(rect.width,
0,marginWidth,client.height);
}

intmarginHeight=client.height-rect.height;
if(marginHeight>0)...{
gc
.fillRectangle(
0,rect.height,client.width,
marginHeight);
}

}

}
);

canvas.addMouseListener(
newMouseListener()...{

publicvoidmouseDown(MouseEvente)...{
intx=e.x,y=e.y;
intmin=HEIGHT,max=HEIGHT+HEIGHT;
if(WIDTH<x&&x<WIDTH+WIDTH)...{
for(inti=0;i<index;i++)...{
if(min<y&&y<max)...{

click
=i;

createImage(parent);
canvas.redraw();
break;
}

min
=max+HEIGHT;
max
=min+HEIGHT;
}

}

}


publicvoidmouseDoubleClick(MouseEvente)...{
}


publicvoidmouseUp(MouseEvente)...{
}

}
);
}


privatevoidcreateImage(finalCompositeparent)...{
intCANVAS_WIDTH=3*WIDTH,CANVAS_HEIGHT=(2*index+1)*HEIGHT;
image
=newImage(parent.getDisplay(),CANVAS_WIDTH,CANVAS_HEIGHT);
GCgc
=newGC(image);

drawTable(parent,gc,names);

drawLine(gc);

gc.dispose();
}


privatevoiddrawLine(GCgc)...{
for(inti=0,x=(int)(WIDTH+0.5*WIDTH),y=2*HEIGHT;i<index-1;i++)...{
gc.drawLine(x,y,x,y
+HEIGHT);
y
=y+HEIGHT;
y
+=HEIGHT;
}

}


privatevoiddrawTable(finalCompositeparent,GCgc,String[]name)...{
for(inti=0,x=WIDTH,y=HEIGHT;i<index;i++)...{
if(i>0)
y
+=2*HEIGHT;

if(i==click)...{
gc.drawRectangle(x,y,WIDTH,HEIGHT);
gc.setBackground(parent.getShell().getDisplay().getSystemColor(
SWT.COLOR_CYAN));
gc.fillRectangle(x
+1,y+1,WIDTH-1,HEIGHT-1);
gc.drawText(name[i],x
+5,y+5);
}
else...{
gc.setBackground(parent.getShell().getDisplay().getSystemColor(
SWT.COLOR_WHITE));
gc.drawRectangle(x,y,WIDTH,HEIGHT);
gc.drawText(name[i],x
+5,y+5);
}

}

}


privateTablecreateTable(Compositecomposite)...{
Tabletable
=newTable(composite,SWT.MULTI|SWT.FULL_SELECTION
|SWT.BORDER);
GridDatagd;
TableColumntc
=newTableColumn(table,SWT.LEFT);
tc.setWidth(
100);
tc.setText(
"name");
tc
=newTableColumn(table,SWT.LEFT);
tc.setWidth(
100);
tc.setText(
"type");
table.setHeaderVisible(
true);
table.setLinesVisible(
true);

gd
=newGridData();
gd.horizontalAlignment
=GridData.FILL;
gd.verticalAlignment
=GridData.FILL;
gd.grabExcessHorizontalSpace
=true;
gd.horizontalSpan
=4;
table.setLayoutData(gd);
returntable;
}


privateCompositecreateTableBtnsComposite(Compositecomposite)...{
GridLayoutglayout;
GridDatagd;
CompositetableBtnsComposite
=newComposite(composite,SWT.NULL);
gd
=newGridData(GridData.FILL_VERTICAL);
gd.horizontalAlignment
=GridData.FILL;
gd.horizontalSpan
=1;
tableBtnsComposite.setLayoutData(gd);
glayout
=newGridLayout(1,true);
tableBtnsComposite.setLayout(glayout);
returntableBtnsComposite;
}


privateButtoncreateTableBtn(CompositetableBtnsComposite,Stringtext)...{
GridDatagd;
Buttonbtn
=newButton(tableBtnsComposite,SWT.PUSH);
btn.setText(text);
gd
=newGridData(GridData.FILL_HORIZONTAL);
btn.setLayoutData(gd);
returnbtn;
}


privateButtoncreateUndoAndRedoBtn(CompositetableBtnsComposite,
Stringtext)
...{
GridDatagd;
finalButtonbtn=newButton(tableBtnsComposite,SWT.PUSH);
btn.setText(text);
btn.setEnabled(
false);
gd
=newGridData(GridData.FILL_HORIZONTAL);
btn.setLayoutData(gd);
returnbtn;
}


privatevoidaddListener2MainBtnAdd(finalCompositeparent,
ButtonmainBtnAdd)
...{
mainBtnAdd.addSelectionListener(
newSelectionAdapter()...{
@Override
publicvoidwidgetSelected(SelectionEvente)...{
//TODO
SelectJoinTableDialogsjtd=newSelectJoinTableDialog(parent
.getShell());
sjtd.setInput(tableList);
sjtd.open();
intreturnCode=sjtd.getReturnCode();
if(returnCode==OK)...{
Object[]result
=sjtd.getResult();
DataTabledt
=(DataTable)result[0];
index
++;

createImage(parent);
canvas.redraw();
}

}

}
);
}


privatevoidaddListener2AddBtn(Buttonadd,finalButtonundo,
finalButtonredo)...{
add.addSelectionListener(
newSelectionAdapter()...{
@Override
publicvoidwidgetSelected(SelectionEvente)...{
StructuredSelectionselection
=(StructuredSelection)initTableViewer
.getSelection();
columnMoveCommand
=newColumnMoveCommand(initDataTable,
resultDataTable,selection);
columnMoveCommand.execute();
undo.setEnabled(
true);
redo.setEnabled(
true);

}

}
);
}


privatevoidaddListener2RemoveBtn(Buttonremove,finalButtonundo,
finalButtonredo)...{
remove.addSelectionListener(
newSelectionAdapter()...{
@Override
publicvoidwidgetSelected(SelectionEvente)...{
StructuredSelectionselection
=(StructuredSelection)resultTableViewer
.getSelection();
columnMoveCommand
=newColumnMoveCommand(resultDataTable,
initDataTable,selection);
columnMoveCommand.execute();
undo.setEnabled(
true);
redo.setEnabled(
true);
}

}
);
}


privatevoidaddListener2UndoBtn(finalButtonundo)...{
undo.addSelectionListener(
newSelectionAdapter()...{
@Override
publicvoidwidgetSelected(SelectionEvente)...{
columnMoveCommand.undo();
}

}
);
}


privatevoidaddListener2RedoBtn(finalButtonredo)...{
redo.addSelectionListener(
newSelectionAdapter()...{
@Override
publicvoidwidgetSelected(SelectionEvente)...{
columnMoveCommand.redo();
}

}
);
}


privatevoidaddListener2AddAllBtn(ButtonaddAll,finalButtonundo,
finalButtonredo)...{
addAll.addSelectionListener(
newSelectionAdapter()...{
@Override
publicvoidwidgetSelected(SelectionEvente)...{
columnMoveCommand
=newColumnMoveCommand(initDataTable,
resultDataTable);
columnMoveCommand.execute();
undo.setEnabled(
true);
redo.setEnabled(
true);

}

}
);
}


privatevoidaddListener2RemoveAllBtn(ButtonremoveAll,finalButtonundo,
finalButtonredo)...{
removeAll.addSelectionListener(
newSelectionAdapter()...{
@Override
publicvoidwidgetSelected(SelectionEvente)...{
columnMoveCommand
=newColumnMoveCommand(resultDataTable,
initDataTable);
columnMoveCommand.execute();
undo.setEnabled(
true);
redo.setEnabled(
true);

}

}
);
}


publicvoidonEnterPage()...{
AutoDataSetWizardControllercontroller
=((AutoDataSetWizard)getWizard())
.getController();
tableList
=controller.getTableList();
initDataTable
=controller.getSelectedTable();
initTableViewer.setInput(initDataTable);

resultDataTable
=DoradoFactory.eINSTANCE.createDataTable();
resultTableViewer.setInput(resultDataTable);

setNames();

redrawImage();
}


privatevoidsetNames()...{
names
=newString[tableList.size()];
inti=0;
for(Iteratorit=tableList.iterator();it.hasNext();i++)...{
DataTabletable
=(DataTable)it.next();
names[i]
=table.getName();
}

}


privatevoidredrawImage()...{
Compositeparent
=canvas.getParent();
createImage(parent);
canvas.redraw();
}


privateclassColumnContentProviderimplementsIStructuredContentProvider...{
publicObject[]getElements(ObjectinputElement)...{
DataTabletable
=(DataTable)inputElement;
returntable.getColumns().toArray();
}


publicvoiddispose()...{
}


publicvoidinputChanged(Viewerviewer,ObjectoldInput,ObjectnewInput)...{
}

}


privateclassColumnLabelProviderimplementsITableLabelProvider...{
publicImagegetColumnImage(Objectelement,intcolumnIndex)...{
returnnull;
}


publicStringgetColumnText(Objectelement,intcolumnIndex)...{
Columncolumn
=(Column)element;
Stringtext
="";

switch(columnIndex)...{
case0:
text
=column.getName();
break;
case1:
text
=column.getType();
break;
}

returntext;
}


publicvoidaddListener(ILabelProviderListenerlistener)...{
}


publicvoiddispose()...{
}


publicbooleanisLabelProperty(Objectelement,Stringproperty)...{
returnfalse;
}


publicvoidremoveListener(ILabelProviderListenerlistener)...{
}

}


privateclassColumnMoveCommand...{
DataTablesrc,dest;

Listcolumns;

StructuredSelectionselection;

publicColumnMoveCommand(DataTablesrc,DataTabledest)...{
this.src=src;
this.dest=dest;
columns
=newArrayList();
for(Iteratorit=src.getColumns().iterator();it.hasNext();)...{
Columncolumn
=(Column)it.next();
columns.add(column);
}


}


publicColumnMoveCommand(DataTablesrc,DataTabledest,
StructuredSelectionselection)
...{
this.src=src;
this.dest=dest;
this.selection=selection;
columns
=newArrayList();
for(Iteratorit=selection.iterator();it.hasNext();)...{
Columncolumn
=(Column)it.next();
columns.add(column);
}

}


publicvoidexecute()...{
for(Iteratorit=columns.iterator();it.hasNext();)...{
Columnc
=(Column)it.next();
src.getColumns().remove(c);
dest.getColumns().add(c);
}

refreshTable();
}


publicvoidundo()...{
for(Iteratorit=columns.iterator();it.hasNext();)...{
Columnc
=(Column)it.next();
src.getColumns().add(c);
dest.getColumns().remove(c);
}

refreshTable();
}


publicvoidredo()...{
execute();
}


privatevoidrefreshTable()...{
initTableViewer.refresh();
resultTableViewer.refresh();
}

}


}
分享到:
评论

相关推荐

    重构--改善既有代码的设计.epub

    某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你壹次壹小步地修改你的代码,这就减少了过程中的风险。很快...

    重构--改善既有代码的设计

    某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快...

    重构-改善既有代码的设计

    6.1 Extract Method(提炼函数) 110 6.2 Inline Method(内联函数) 117 6.3 Inline Temp(内联临时变量) 119 6.4 Replace Temp with Query(以查询取代临时变量) 120 6.5 Introduce Explaining ...

    重构-改善既有代码的设计 中文版.pdf

    6.1 Extract Method(提炼函数) 6.2 Inline Method(将函数内联化) 6.3 Inline Temp(将临时变量内联化) 6.4 Replace Temp With Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引入解释性变量...

    重构-改善既有代码的设计(中文版)

    某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快...

    重构-改善既有代码的设计.chm

    某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你壹次壹小步地修改你的代码,这就减少了过程中的风险。很快...

    重构-改善既有代码的设计+中文版

     Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce Explaining Variable 引入解释性变量   Split ...

    重构-改善既有代码的设计.chm

    某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你壹次壹小步地修改你的代码,这就减少了过程中的风险。很快...

    重构-改善既有代码的设计

    某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你壹次壹小步地修改你的代码,这就减少了过程中的风险。很快...

    重构-改善既有代码的设计 中文版

    6.1 Extract Method(提炼函数) 6.2 Inline Method(将函数内联化) 6.3 Inline Temp(将临时变量内联化) 6.4 Replace Temp With Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引入解释性变量...

    重构-改善既有代码的设计(chm清晰版)

    某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你壹次壹小步地修改你的代码,这就减少了过程中的风险。很快...

    重构-改善既有代码的设计(中文版)

    Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们...某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。

    SharpRefactor(C#代码重构工具)

    本工具用于代码重构和代码自动生成。现阶段主要用于C#代码重构。 所谓重构也就是“保持软件的外在功能不变,重新调整其内部结构”。 关于每种重构模式的含义,请参见http://www.refactoring.com/ 具体功能...

    重构-改善既有代码的设计中文版

    Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位...某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。点击进入该书更多详细信息。

Global site tag (gtag.js) - Google Analytics