锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
榪欎笁澶╂潵錛屼竴鐩村湪涓轟竴涓棶棰樻墍鍥版壈銆?br />
鎴戝仛鐨勯」鐩槸灝唀mf鍜実ef緇撳悎鐨勪竴涓吀鍨嬪疄渚嬨傚叾瀹炴垜鎺ヨЕ榪欎簺涓滆タ涔熸墠4錛?涓湀錛屼袱涓狤clipse宸ュ叿閮藉緢鐔熸?zhèn)夊Q屼絾鏄茍涓嶈兘璇存槸綺鵑氥?br />
鍦ㄩ」鐩埗浣滅殑榪囩▼涓紝緙栬緫鍣ㄧ殑甯冨眬闂騫舵病鏈夋嬁鍒版闈笂鏉ヨ璁恒傛瘯绔燂紝鍔熻兘娌℃湁瀹炵幇錛岀紪杈戝櫒浣滅殑鍐嶆紓浜篃涓嶈搗浣滅敤銆?br />
鐜板湪錛屾墍鏈夌殑鍔熻兘鐐瑰叏閮ㄦ寜瑕佹眰瀹炵幇浜嗭紝鍙槸鍐嶇湅鐪嬬紪杈戝櫒錛屽氨浼氳寰楀緢澶栬錛屽懙鍛點?br />
灝界鑰佸ぇ涓嶅湪鍏徃錛屼絾鏄垜鎯充粬鑲畾鏀寔鎴戠殑榪欎釜鎯蟲硶錛氬皢鐣岄潰浣滅殑professional涓鐐廣?br />
浜庢槸錛屾垜嫻垂浜?澶╂椂闂存潵閲嶆柊鍋氬竷灞銆?br />
鎼滅儲icon
欏圭洰緇勬病鏈夌粰鎴戦厤澶囩編宸ワ紝鎵鏈夌殑鍥劇墖閮芥槸涓存椂鐨勶紝鎴戝氨閲囩敤浜嗕竴浜泀q琛ㄦ儏鍥撅紝鎵浠ョ紪杈戝櫒寰堚滃彲鐖扁濄傜幇鍦ㄩ渶瑕佹牴鎹瘡涓ā鍨嬬殑瀹為檯鍚箟鏉ラ厤澶噄con錛屼簬鏄埄鐢╣oogle & baidu鎼滀簡涓浜涘浘鐗囦笅鏉ャ傚ソ鍦ㄦ垜榪樹細鐐筽s錛岄偅浜屽崄澶氫釜鍥炬爣灝辯畻瀹氫簡銆?br />
鐮旂┒甯冨眬
榪欐鐨勪唬鐮佸ぇ鏀歸狅紝闇瑕佷弗閲嶇殑鎰熻阿涓涓漢錛歳eload_cn銆傞潪甯告劅璋粬鑳借愬績鐨勫惉鎴戜笉鍋滅殑鍙戠墷楠氾紝騫剁粰浜庢紜殑鎸囧銆傝繖瀵瑰悗鏉ョ殑鏀歸犳垚鍔熻搗鍐沖畾鎬т綔鐢ㄣ傚敖綆′粬灝嗙ぞ鍖洪噷鐨勫竻鐓ф敼鎴愪簡榛戠尒鐚?..... 鏈緇堝緱緇撴灉鏄敼濂戒簡錛屼竴鍒囬兘璺焒low閭d箞璞?br />
濂斤紝杞叆姝i銆傜洰鍓嶇殑緙栬緫鍣ㄥ姛鑳藉凡緇忓疄鐜頒簡錛屼絾鏄負浠涔堣鏀瑰竷灞鍛紵鍥犱負鐜板湪緙栬緫鍣ㄩ噰鐢ㄧ殑鏄痻yLayout錛屽垱寤轟竴涓璞′箣鍚庯紝灝嗗畠鐨剎ywh淇濆瓨鍦ㄦā鍨嬪璞′腑錛岀劧鍚庡啀refreshVisual鐨勬椂鍊欒緗瓼igure鐨凚ound銆傝繖涔堝仛鐨勯棶棰樻槸錛岄鍏堬紝娌℃湁寰堝ソ鐨勮綆楀潗鏍囷紝鎵浠ュ潗鏍囨湁鐐瑰嚭鍏ワ紙鏈夌殑鏃跺欏潗鏍囧嚭鍏ュぇ鐨勯毦浠ユ帴鍙楋級錛屽叾嬈★紝鏈伐鍏峰畾涔夌殑涓昏鏄祦紼嬶紝鎵浠ョ紪杈戝櫒閲岀殑鈥滃唴瀹光濆緢澶氾紝姣忓垱寤轟竴涓璞¢兘闇瑕?u>鎵嬪伐鎷栨嫿鍒板悎閫傜殑浣嶇疆涓娿?br />
鍦╮eload_cn鐨勬彁紺轟笅錛屾垜鐮旂┒浜嗕竴涓婫EF鐨凢low渚嬪瓙銆傜敱浜庢椂闂村叧緋伙紙鍏冩棪涔嬪悗灝變細鍙戝竷鏈緇堢増鏈紝瑕佷笉鍔犵彮錛岃涓嶅姞蹇剼姝ュ共媧伙級錛屾垜鐩存帴灝卞皢flow閲岀殑GraphLayoutManager鎷胯繃鏉ョ敤浜?..
緇撴灉鏄紝緇忓父鎶ヤ簺鑾悕鍏跺鐨勯敊璇?br />
鎵璋撳績鎬ュ悆涓嶄簡鐑眴鑵愩?br />
緇х畫鍦╮eload_cn鐨勬彁紺轟笅錛岀爺絀朵簡浠栫殑sequnce diagram鐨勪緥瀛愩傚湪榪欎釜渚嬪瓙涓紝浠栧仛浜嗕釜寰堢畝鍗曠殑甯冨眬澶勭悊銆?br />
浠庤繖閲屼緥瀛愪腑錛屾垜棰嗘?zhèn)熷囖Z簡鐪熻皼錛?br />聽聽聽聽聽聽鍦‥ditPart涓緗殑Layout Policy鍏跺疄涓昏澶勭悊鐨勬槸鍒涘緩瀵硅薄絳夌瓑request錛屽茍涓嶅鐞嗙湡姝g殑緙栬緫鍣ㄥ竷灞銆傚張鎴栬呰瀹冪殑甯冨眬鏄昏緫鎰忎箟涓婄殑銆傜湡姝e鐞嗗竷灞錛屾潵璁╂垜浠湅鍒版晥鏋滅殑錛屾槸Figure鐨勫竷灞銆傝岃繖涓濂芥槸鎴戝父甯稿拷鐣ョ殑銆?br />
Figure鎬庝箞甯冨眬錛燂紵鎴戜竴鑸敤鐨勫氨鏄痻yLayout鍜孴oolbarLayout銆備絾鏄鏋滆浣滃嚭婕備寒鐨勬晥鏋滐紝榪欎簺榪樻槸涓嶅鐨勩傚叓榪涘埗鐨刡log涓彁鍒頒簡draw2d鐨則ree example銆傛垜鐪嬭繃浜嗭紝鐒跺悗鐮旂┒浜嗕竴涓嬶紝瑙夊緱澶畝鍗曚簡錛屼笉鑳界鍚堟湰欏圭洰鐨勯渶姹傘?br />
鍥炲ご鍐嶇湅鐪媐low錛岃寰楄繖涓緥瀛愭湰韜氨鏄祦紼嬪畾涔夛紝騫朵笖璺熸垜鐨勯」鐩湪Figure涓婃湁寰堝鍏卞悓鐐廣傘傘?br />
浠嶇劧蹇冩湁浣欐?zhèn)稿Q屾瘯绔熺敤flow鐨勪唬鐮佷綔鐨勬墍鏈夊皾璇曪紙鐢ㄤ簡1澶╃殑鏃墮棿錛夊叏閮ㄥけ璐ヤ簡錛岃屼笖榪樿觸鐨勮帿鍚嶅叾濡欍?br />
寮濮嬪皾璇?/strong>
涓嶈兘鍥犱負澶辮觸錛屾墍浠ユ斁寮冿紙浣嗘槸鍙互鏈夋斁寮冪殑鎯蟲硶錛屽懙鍛碉級銆傛垜鍐沖畾涓鐐逛竴鐐瑰湴鏉ュ皾璇曘?br />
棣栧厛錛屾垜鏇挎崲浜嗘墍鏈夌殑icon錛岃嚦灝戝浘鏍囩湅璧鋒潵宸茬粡鑸掓湇澶氫簡銆?br />
鎺ョ潃錛屾牴鎹甪low涓璮igure鐨勫仛娉曪紝鏇存柊浜嗛」鐩腑鐨勬墍鏈塅igure銆傝繍琛屼竴涓嬬湅鐪嬶紝鍛靛懙錛岃嚦灝戝浘鏍囧緢璞′簡銆?br />
鎴戝緢鍠滄flow涓嚜鍔ㄨ綆桭igure浣嶇疆鐨勫姛鑳藉拰鍔ㄦ佺Щ鍔ㄦ晥鏋溿傛庝箞鍔烇紵緇х畫鏀硅浠g爜銆?br />
灝咷raphLayoutManager灝忓績緲肩考鐨勬惉浜嗚繃鏉ャ傛病鏈夋晥鏋溿備絾鏄嚦灝戞病鏈夊嚭閿欍?br />
寮濮嬩嬌鐢℅raphLayoutManager鏉ヨ繘琛屽潗鏍囪綆椼傦紙榪欎釜榪囩▼婕暱鑰岀棝鑻︼紝涓嶅仠鐨勬姤寮傚父錛屼笉鍋滅殑瀵規(guī)瘮浠g爜錛屼笉鍋滅殑璺熻釜錛屼笉鍋滅殑鍙戠墷楠?...錛?br />
鏈鍚庡嚭鐨勯棶棰樻渶鏈夋剰鎬濓紝鍋囧緙栬緫鍣ㄦ牴妯″瀷鐨凢igure閲囩敤flow涓殑figure錛岄偅涔堢紪杈戝櫒涓彧鏄劇ず榪炵嚎銆備負浠涔堝憿錛熷洜涓烘垜鐨勭紪杈戝櫒涓嬌鐢ㄧ殑鏄痸iewer.setRootEditPart(new ScalableFreeformRootEditPart());鑰宖low涓敤鐨勬槸getGraphicalViewer().setRootEditPart(new ScalableRootEditPart());鎵浠ュ湪鎴戣繖杈癸紝figure閲囩敤FreeformLayer灝眓o problem浜嗐?/p>
緇撴灉聽聽聽聽
緇撹
鍋囧浣犲拰鎴戜竴鏍鳳紝鍦ㄩ」鐩埗浣滃悗鏈熶慨鏀圭紪杈戝櫒鐨勫竷灞錛岃繖閲屾湁鍑犱釜寤鴻錛?br />
1 鐮旂┒涓涓嬩緥瀛愶紝浠庣畝鍗曠殑寮濮嬶紝涓鐩村埌闅劇殑錛岃鐞嗚鐭ヨ瘑鏍規(guī)繁钂傚浐銆?br />2 浣滀釜灝忎緥瀛愶紝鎴栬呭皢浣犲凡緇忎綔鐨勫皬渚嬪瓙榪涜綾諱技鐨勬敼緙栵紝鐪嬬湅鍑轟粈涔堥棶棰橈紝涓轟粈涔堝嚭闂銆?br />3 渚嬪瓙娌″仛鍑烘潵娌″叧緋伙紝榪欎簺璺熷ご鏍藉湪灝忎緥瀛愪笂姣旀牻鍦ㄩ」鐩腑璁╀漢嬈f叞鐨勫銆?br />4 鍏堜慨鏀笷igure銆傚敖閲忔帴榪戜綘鎯寵鐨勬晥鏋溿?br />5 寮曞叆甯冨眬錛屾殏鏃朵笉瑕佷嬌鐢ㄥ畠錛屽彧瑕佷粬鐨勬祦紼嬭蛋涓嬫潵娌℃湁闂灝辨垚鍔熶簡涓鍗娿?br />6 浣跨敤甯冨眬銆備細鍑虹幇寰堝闂錛屼絾鏄緢瀹規(guī)槗瀹氫綅闂銆傝皟璇曞惂銆?br />
鏆傛椂灝辮繖涔堝鍚э紝鍒氬垰鐨勬敼鍔ㄥ鑷翠簡緙栬緫鍣ㄤ腑鐨勫垹闄ゅ姛鑳芥姏寮傚父錛屾垜寰楃湅鐪嬪幓
鍦ㄥ弬鑰冧簡GEF鐨?/SPAN>flow example涔嬪悗錛屽鍏朵唬鐮佷綔浜嗛儴鍒嗛噸鏋勶紝鍐欎簡榪欑墖鏂囩珷錛屽笇鏈涘閬囧埌鍚屾牱闂鐨勫悓蹇楄兘澶熸湁涓瀹氱殑甯姪銆?/SPAN>
棣栧厛寮曞叆涓涓帴鍙o細
public interface GraphBuilder {
public void contributeNodesToGraph(DirectedGraph graph, Map map);
public void contributeEdgesToGraph(DirectedGraph graph, Map map);
public void applyGraphResults(DirectedGraph graph, Map map);
}
榪欎釜鎺ュ彛涓畾涔変簡鍑犱釜鏂規(guī)硶錛屽叾鍚箟浠庡叾鏂規(guī)硶鍚嶄腑鍙互鐚滃嚭錛?/SPAN>
contributeNodesToGraph錛氬皢褰撳墠瀵硅薄浣滀負鑺傜偣錛?/SPAN>Node錛夋坊鍔犲埌DirectedGraph涓?/SPAN>
contributeEdgesToGraph錛氬皢褰撳墠瀵硅薄鎵瀵瑰簲鐨勮繛綰夸綔涓鴻竟錛?/SPAN>Edge錛夋坊鍔犲埌DirectedGraph涓?/SPAN>
applyGraphResults錛氬皢鍥句腑鐢熸垚鐨勫竷灞淇℃伅鍙栧嚭錛屽鏈璞¤繘琛岄噸鏂板竷灞銆?/SPAN>
鎺ュ彛涓殑graph鍙傛暟灝辨槸淇濆瓨鐨勫浘鐨勪俊鎭紝map鍙傛暟緇存寔涓涓璞″埌鑺傜偣/杈圭殑鏄犲皠錛屼嬌寰楁瘡涓璞¤兘澶熸柟渚跨殑鎵懼埌鍏跺搴旂殑鍥句腑鐨勮妭鐐規(guī)垨鑰呰竟銆傝繖涓帴鍙g殑浣跨敤錛屽湪鍚庨潰浼氭湁娑夊強銆備笅闈㈠厛鐪嬬湅鏄劇ず鍥劇殑瀹瑰櫒鏄浣曟瀯寤虹殑銆?/SPAN>
鍥劇殑瀹瑰櫒瀹氫箟涓?/SPAN>GraphDiagramEditPart錛岃繖涓?/SPAN>EditPart瀵瑰簲浜庤鏄劇ず鐨勬湁鍚戝浘鐨勫鍣ㄣ傚畠瀹炵幇浜?/SPAN>GraphBuider鎺ュ彛錛岃繖涔熸槸鎴戜滑涓昏闇瑕佸叧娉ㄧ殑鎺ュ彛錛?/SPAN>
public class GraphDiagramEditPart extends AbstractGraphicalEditPart implements
GraphBuilder.
contributeNodesToGraph鏂規(guī)硶灝嗚嚜韜綔涓鴻妭鐐規(guī)坊鍔犲埌鍥句腑錛屼絾鏄洜涓?/SPAN>GraphDiagramEditPart瀵瑰簲鐨勬槸瀹瑰櫒錛屽洜姝ゅ畠涓嶉渶瑕佸悜鍥句腑娣誨姞淇℃伅錛屽彧鏄皟鐢ㄥ叾瀛?/SPAN>EditPart錛屽皢鍏舵坊鍔犲埌鍥句腑銆?/SPAN>
public void contributeNodesToGraph(DirectedGraph graph, Map map) {
for (int i = 0; i < getChildren().size(); i++) {
NodeEditPart activity = (NodeEditPart)getChildren().get(i);
activity.contributeNodesToGraph(graph, map);
}
}
contributeEdgesToGraph鏂規(guī)硶灝嗚繖涓?/SPAN>EditPart鐨勬墍鏈夊瓙EditPart鍙栧嚭錛岃皟鐢ㄥ叾contributeEdgesToGraph鏂規(guī)硶錛岄氳繃榪欎釜鏂規(guī)硶錛屽氨鍙互灝嗘墍鏈夌殑杈規(guī)坊鍔犲埌鍥句腑浜嗭細
public void contributeEdgesToGraph(DirectedGraph graph, Map map) {
for (int i = 0; i < getChildren().size(); i++) {
NodeEditPart child = (NodeEditPart)children.get(i);
child.contributeEdgesToGraph(graph, map);
}
}
applyGraphResults鏂規(guī)硶灝嗘墍鏈夊彇鍑烘墍鏈夌殑瀛?/SPAN>EditPart錛屽茍璋冪敤鍏?/SPAN>applyGraphResults錛屼嬌寰楀浘涓墍鐢熸垚鐨勫竷灞淇℃伅鑳藉琚簲鐢ㄥ埌鏄劇ず涓娿?/SPAN>
public void applyGraphResults(DirectedGraph graph, Map map) {
applyChildrenResults(graph, map);
}
protected void applyChildrenResults(DirectedGraph graph, Map map) {
for (int i = 0; i < getChildren().size(); i++) {
GraphBuilder part = (GraphBuilder) getChildren().get(i);
part.applyGraphResults(graph, map);
}
}
涓嬮潰瑕佷粙緇嶇殑鏄?/SPAN>NodeEditPart錛屽畠浣滃浘涓墍鏈夎妭鐐規(guī)墍瀵瑰簲鐨?/SPAN>EditPart鐨勬娊璞$埗綾伙紝涔熷疄鐜頒簡GraphBuilder鎺ュ彛銆傛瘡涓涓鍋氫負鑺傜偣娣誨姞鍒板浘涓殑EditPart錛屽簲璇ョ戶鎵胯繖涓被銆?/SPAN>
public abstract class NodeEditPart extends AbstractGraphicalEditPart implements
GraphBuilder{
public void contributeNodesToGraph(DirectedGraph graph,
Map map) {
Node n = new Node(this);
n.outgoingOffset = 7;
n.incomingOffset = 7;
n.width = getFigure().getPreferredSize().width;
n.height = getFigure().getPreferredSize().height;
n.setPadding(new Insets(10,8,10,12));
map.put(this, n);
graph.nodes.add(n);
}
public void contributeEdgesToGraph(DirectedGraph graph, Map map) {
List outgoing = getSourceConnections();
for (int i = 0; i < outgoing.size(); i++) {
EdgeEditPart part = (EdgeEditPart)getSourceConnections().get(i);
part.contributeEdgesToGraph(graph, map);
}
}
public void applyGraphResults(DirectedGraph graph, Map map) {
Node n = (Node)map.get(this);
getFigure().setBounds(new Rectangle(n.x, n.y, n.width, n.height));
for (int i = 0; i < getSourceConnections().size(); i++) {
EdgeEditPart trans = (EdgeEditPart) getSourceConnections().get(i);
trans.applyGraphResults(graph, map);
}
}
}
鍐嶅氨鏄竟鎵瀵瑰簲EditPart鐨勬娊璞$被EdgeEditPart銆傛瘡涓涓浣滀負杈規(guī)坊鍔犲埌鍥句腑鐨?/SPAN>EditPart錛岄渶瑕佺戶鎵胯繖涓被銆傚湪涓婇潰NodeEditPart涓鍏舵墍瀵瑰簲鐨?/SPAN>Figure鍏跺疄騫舵病鏈変粈涔堣姹傦紝浣嗘槸瀵?/SPAN>EdgeEditPart鎵瀵瑰簲鐨?/SPAN>Figure錛岃姹傚叾Figure蹇呴』鐢變竴涓?/SPAN>BendpointConnectionRouter錛屼綔涓哄叾ConnectionRouter錛?/SPAN>setConnectionRouter(new BendpointConnectionRouter())銆傝繖鏍峰浘鐨勮竟鐨勮礬寰勪俊鎭墠鑳藉琚樉紺哄嚭鏉ャ?/SPAN>
public abstract class EdgeEditPart extends AbstractConnectionEditPart implements
GraphBuilder {
public void contributeEdgesToGraph(DirectedGraph graph, Map map) {
Node source = (Node)map.get(getSource());
Node target = (Node)map.get(getTarget());
Edge e = new Edge(this, source, target);
e.weight = 2;
graph.edges.add(e);
map.put(this, e);
}
public void applyGraphResults(DirectedGraph graph, Map map) {
Edge e = (Edge)map.get(this);
NodeList nodes = e.vNodes;
PolylineConnection conn = (PolylineConnection)getConnectionFigure();
conn.setTargetDecoration(new PolygonDecoration());
if (nodes != null) {
List bends = new ArrayList();
for (int i = 0; i < nodes.size(); i++) {
Node vn = nodes.getNode(i);
int x = vn.x;
int y = vn.y;
if (e.isFeedback) {
bends.add(new AbsoluteBendpoint(x, y + vn.height));
bends.add(new AbsoluteBendpoint(x, y));
} else {
bends.add(new AbsoluteBendpoint(x, y));
bends.add(new AbsoluteBendpoint(x, y + vn.height));
}
}
conn.setRoutingConstraint(bends);
} else {
conn.setRoutingConstraint(Collections.EMPTY_LIST);
}
}
}
鏈鍚庣殑灝辨槸涓涓?/SPAN>LayoutManager鏉ュ垵濮嬪寲鍥劇殑鍒涘緩錛屼互鍙婂鍥劇殑淇℃伅榪涜瑙i噴浜嗭紝鐢熸垚鏈緇堝竷灞浜嗐傝繖涓?/SPAN>GraphLayoutManager浣滀負GraphDiagramEditPart鎵瀵瑰簲鐨?/SPAN>GraphDiagram鐨?/SPAN>LayoutManager錛屾潵鏄劇ず鍥劇殑鍐呭銆?/SPAN>
public class GraphLayoutManager extends AbstractLayout {
private GraphBuilder diagram;
GraphLayoutManager(GraphBuilder diagram) {
this.diagram = diagram;
}
protected Dimension calculatePreferredSize(IFigure container, int wHint,
int hHint) {
container.validate();
List children = container.getChildren();
Rectangle result = new Rectangle().setLocation(container
.getClientArea().getLocation());
for (int i = 0; i < children.size(); i++)
result.union(((IFigure) children.get(i)).getBounds());
result.resize(container.getInsets().getWidth(), container.getInsets()
.getHeight());
return result.getSize();
}
public void layout(IFigure container) {
DirectedGraph graph = new DirectedGraph();
Map partsToNodes = new HashMap();
diagram.contributeNodesToGraph(graph, partsToNodes);
diagram.contributeEdgesToGraph(graph, partsToNodes);
new DirectedGraphLayout().visit(graph);
diagram.applyGraphResults(graph, partsToNodes);
}
}
鍙互鐪嬪埌鍦?/SPAN>layout鏂規(guī)硶涓紝棣栧厛鐢熸垚浜嗕竴涓?/SPAN>DirectedGraph錛屽茍璋冪敤浜?/SPAN>contributeNodesToGraph浠ュ強contributeEdgesToGraph鏂規(guī)硶錛屽皢鑺傜偣鍜岃竟鐨勪俊鎭坊鍔犲埌榪欎釜鐢熸垚鐨?/SPAN>DirectedGraphGraph涓紝鐒跺悗浣跨敤甯冨眬綆楁硶DirectedGraphLayout().visit(graph)鏉ヨ綆楃敓鎴愬浘鐨勪俊鎭紙榪欓噷浣跨敤浜?/SPAN>visitor妯″紡錛夋渶鍚庤皟鐢?/SPAN>applyGraphResults灝嗗浘鐨勪俊鎭簲鐢ㄥ埌鍥懼艦鐨勬樉紺轟笂銆?/SPAN>
鑷蟲錛屾墍鏈夋鏋剁殑宸ヤ綔鍋氬畬浜嗭紝濡傛灉瑕佸皢妯″瀷浣滀負涓涓湁鍚戝浘鏄劇ず鐨勮瘽錛屽彧闇瑕佸皢妯″瀷鐨勫鍣ㄥ璞″搴斾簬GraphDiagramEditPart錛堝湪EditPartFactory涓繘琛屾槧灝勶級錛屼負姣忎竴涓渶瑕佽〃紺轟負鑺傜偣鐨勫璞★紝瀵瑰簲鍒頒竴涓戶鎵夸簬NodeEditPart鐨?/SPAN>EditPart錛屼負姣忎竴涓渶瑕佽〃紺轟負杈圭殑妯″瀷瀵硅薄錛屽搴斿埌涓涓戶鎵夸簬EdgeEditPart鐨?/SPAN>EditPart銆傝繖鏍鳳紝灝辮兘澶熷皢鍥劇殑甯冨眬綆楁硶錛屽簲鐢ㄥ埌GEF妗嗘灦涓簡銆?/SPAN>
榪欓噷鍐欑殑姣旇緝綆鍗曪紝浣跨敤璧鋒潵涔熶細鏈変竴浜涘叿浣撶殑綰︽潫銆備緥濡傚湪鏈夊悜鍥句腑錛屾槸涓嶈兘澶熸湁瀛ょ珛鐨勮妭鐐圭殑銆傚鏋滀嬌鐢?/SPAN>CompoundDirectedGraph錛屽氨涓嶄細鏈夎繖鏍風(fēng)殑闂錛?/SPAN>CompoundDirectedGraph鍙互鍖呮嫭瀛愬浘錛屽彲浠ユ敮鎸佹洿涓哄鏉傜殑鍥懼艦銆傚湪Flow Example涓嬌鐢ㄧ殑灝辨槸CompoundDirectedGraph銆傚湪鍚庨潰錛屾垜鎴栬浼氬皢榪欎釜妗嗘灦榪涜鏀瑰啓錛屼互浣垮叾鏀寔CompoundDirectedGraph鏉ヨ繘琛屽竷灞綆楁硶銆備笅闈㈢殑鍥炬槸涓涓敓鎴愮殑渚嬪瓙錛屽ぇ瀹跺彲浠ョ湅涓涓嬫晥鏋?
榪欐槸浠嶰WL鏂囦歡涓鍙栧唴瀹逛箣鍚庣敓鎴愮殑涓涓浘鐨勮〃紺恒傚彲浠ョ湅鍒幫紝OWL鐨勮妭鐐歸氳繃鑷姩鍥劇殑鑷姩甯冨眬涔嬪悗錛屽凡緇忔湁浜嗚緝濂界殑瑙嗚鏁堟灉銆傚鏋滄病鏈夎繖鏍風(fēng)殑甯冨眬鐨勮瘽錛屽洜涓哄崟綰殑OWL鏂囦歡涓茍涓嶄細鍖呭惈鑺傜偣鐨勫浘鐨勪俊鎭紝鍥炬樉紺哄嚭鏉ヤ細鍙樺緱闈炲父鐨勪貢錛屾墍鏈夌殑鑺傜偣閮戒細鍫嗗湪涓璧楓?BR>
鍘熸枃鍦板潃:http://www.tkk7.com/eclipshine/archive/2005/07/22/8195.aspx
9.22 SDO瀛︿範絎旇 |
浠婂ぉ綺楃矖鐪嬩簡涓鐪糞DO錛岀暐鏈夌悊瑙c?/FONT>
SDO鍏ㄧОService Data Objects錛屾槸IBM鎻愬嚭鐨勪竴涓鏋惰鑼冦係DO妗嗘灦鐢變笁閮ㄥ垎緇勬垚錛欴MS錛圖ata Mediator Services錛夛紝Data Graph鍜孌ataObject銆侱MS璐熻矗鐢熸垚Data Graph錛孌ata Graph鍖呭惈涓緋誨垪鍏寵仈鐨凞ata Object銆傚鎴峰拰DataGraph鎵撲氦閬擄紝鑰孌MS濡備綍鐢熸垚Data Graph鍙堝浣曚粠Data Graph鏇存柊鍚庨潰鐨勬暟鎹垯鏃犻渶鍏沖績銆侱ata Graph鏄疍isconnected Mode鐨勬暟鎹鐞嗘柟寮忥紝鍗沖鍏惰繘琛岀殑淇敼鎿嶄綔錛屽皢涓嶄細绔嬪埢浣撶幇錛岄渶瑕佸皢淇敼榪囩殑Data Graph鐢盌MS鏉ユ洿鏂板埌鏁版嵁婧愩侱ata Graph鏄氳繃log change summary鏉ュ疄鐜扮殑銆?/FONT>
鍦⊿pec涓閬擄紝Data Graph琚簭鍒楀寲涓篨ML涔熻兘浠嶺ML涓鍙嶅簭鍒楀寲銆傝繖浣垮緱鍦⊿ervices鍜屽叾Caller涔嬮棿浼犻扗ataGraph闈炲父鐩存帴銆傚悓鏃朵篃鎻愬嚭浜嗙郴緇熷唴閮ㄣ佺郴緇熶箣闂存暟鎹氦浜掔殑涓鑷存柟寮忊斺旈氳繃XML搴忓垪鍖栬繃鐨凞ata Graph銆?/FONT>
Data Object鍙互琚姩鎬佸疄鐜幫紙紼嬪簭閲屽皢鐪嬩笉瑙佸叿浣撶殑Data Object綾伙紝姣斿Employee綾伙紝鍥犳涔熸棤闇瀹氫箟XML Schema錛夛紝涔熷彲浠ヨ闈欐佺敓鎴愶紙渚嬪棰勫厛寤烘ā鍚庝嬌鐢ㄥ伐鍏風(fēng)敓鎴愶紝鐩墠IBM鍩轟簬EMF鐨凴I鍙互浣跨敤EMF鏉ョ敓鎴愶級銆?/FONT>
DMS鍙互鏈夎澶氬疄鐜版柟寮忥紝鍦↖Bm鐨凷DO Specification涓茍娌℃湁浠諱綍鍏充簬DMS瀹炵幇鏂瑰紡鐨勮鑼冦傚疄闄呬笂錛孌MS鍦⊿DO Spec V2.0閲岄潰宸茬粡鏀圭ОDAS錛圖ata Access Services錛夛紝鎴戜滑鍙戠幇榪欏懡鍚嶅拰DAO錛圖ata Access Object錛夋ā寮忎綍鍏剁浉浼箋備笉榪囪繖閲屾槸Service銆傞偅涔堝彲浠ユ兂璞″湪SOA涓紝鎴戜滑鍙互鎻愪緵榪欐牱鐨凞AS鏉ユ彁渚涙暟鎹茍浣滄暟鎹洿鏂般傞毦閬撲笌DAO綾諱技榪欏皢浼氭垚涓轟竴縐峉OA妯″紡錛?/FONT>
鏇撮噸瑕佺殑鏄紝DAS鍙互鍦↗2EE鐨勫悇灞傞兘鑳借浣跨敤銆備綘鍙互浣跨敤JDBC瀹炵幇DAS鐢ㄥ畠鍋氫竴涓寔涔呭寲鏈嶅姟灞傦紝浣犲彲浠ョ敤EJB瀹炵幇DAS騫朵笖鏆撮湶鎴怶eb Service鈥︹︿綘鐢氳嚦鍙互浣跨敤Hibernate銆丣DO榪欐牱鐨勬寔涔呭寲宸ュ叿鏉ュ疄鐜癉AS銆?/FONT>
鎵浠ユ垜浠笉鍙兘娣鋒穯SDO妗嗘灦鍜孒ibernate銆丣DO絳夊伐鍏封斺斿洜涓哄悗鑰呭彧鏄寔涔呭寲宸ュ叿瀛樺湪浜嶦IS涔嬩笂錛涗篃鏃犻渶鎬鐤慡DO鐨勪環(huán)鍊尖斺擲DO紜疄鍙互涓烘暣涓狫2EE搴旂敤灝ゅ叾鏄疭OA鎻愪緵涓涓竴鑷寸殑鏁版嵁澶勭悊鏂瑰紡銆?/FONT>
鏄庡ぉ緇х畫鐮旂┒銆傚笇鏈涜兘娣卞寲銆佺籂姝g幇鍦ㄧ殑鐞嗚В銆?BR> |