??xml version="1.0" encoding="utf-8" standalone="yes"?> 最q在写一个?/span>XMPP协议(gtalk?/span>jabber使用?/span>) x通讯的客LQ在.net下用了一?/span>Open Source?/span>ags. q个库是ZWindows Socket异步方式来做底层架构的。这存?/span>NUnit的用问题, 如果按照一?/span>Unit使用q程Q在客户端发求后Q因为异步原因,会不{接收数据的delegate事g被调PTest函数׃提前退出?/span> 为此到网上vgoogle了一番,均无此法Q后来搜C网上的英文mailQ?/span>mail里写了几行好像测试异步访?/span>Web服务器的试E序Q没头没不出I竟q什么的Q他们是讨论一?/span>feature问题Q,但里面几行给了我很大提示Q其中有一?/span> if (!reset.WaitOne(timeout, true)) q似乎就是我要寻扄提示Q嗯用线E同步信号不错,估计可以解决Q经q?/span>2个小时反复试验终于出炉啦,呵呵! 大体E序如下Q?/p> static ManualResetEvent reset; private const int timeout = 3000; [TestFixtureSetUp] public void FixtureSetUp() { reset = new ManualResetEvent(false); } [TestFixtureTearDown] public void FixtureTearDown() { reset.Close(); } [Test] public void TestConnect() { 。。。。?/p> msgControl.Connect(connectInfo); Assert.AreNotEqual("", msgControl.Status); msgControl.RecvStringEvent += new RecvStringCallback(msgControl_RecvStringEvent); reset.Reset(); // note for some reason r.AsyncWaitHandle.Wait won't work as expected // if (!r.AsyncWaitHandle.WaitOne (timeout, true)) if (!reset.WaitOne(timeout, true)) { if (recvTimes == 0) { Assert.Ignore("Timeout"); } else { Assert.AreEqual(8, recvTimes, "not recv 8 times"); } } Assert.IsNotNull(message, message); } private int recvTimes = 0; void msgControl_RecvStringEvent(string msgText) { recvTimes++; message = msgText; if (recvTimes > 9) { recvTimes = 0; reset.Set(); } } 希望能对~写异步通讯的h有所帮助 mantis 的网?http://www.mantisbt.org/ 1、用php写的pȝQ安装方便,不用?/span> bugzilla 那样安装那么?/span>perl支持Q?/span> 2、系l相对简单轻,使用单; 3、出色的多语支持Q对于对日开发等公司非常合适; 安装Q?/p> 本h在安装了其他免费?/span>phppȝ后,安装mantis直接在页面,敲入路径立刻成功。就是后来注册用hQ它要把密码通过mail发到个hQ需要在config中配|?/span>smtp mail Q?/span>mantis使用的是phpmailerQ。配|完后一?/span>OK?/span> 以下是用的囄Q?br /> 如图Q它的多语支持非常出Ԍ 1、可以?/span>utf-8为内码,q样可以多种语言q存Q?/span> 2、每个用户可以自定义界面语言Q?/span> q是讄语言地方; q是修改后日文界面:
古语有云 Q大家好Q才是真的好 GEF源码分析Q六Q?GEF 的EditPart的职能分?__ 跨国时尚媒体集团q告部门 的故??BR> 部门q将李L会议Q简短阐明会议主题和要求后,Qؓ了提高会议效率会议每人最?/SPAN>5分钟发言Q最?/SPAN>20分钟讨论旉Q?/SPAN>5分钟GraphicalEditPart先生做ȝQ?/SPAN> 王首先站v发言Q“目前我?/SPAN>EditPart部门Q虽Ӟ主要d有明定义,但是内部的工作流E不明确Q没有可依章E?/SPAN>...”?/SPAN> “是呀Q公司目前还没有我们部门的标准操作手册,很多问题都有很大随机性,工作的好坏过于依赖h员本w的工作能力Q这十分不利于h员的内部动以及Ch员的补充”我们的GraphicalEditPart"教练"满意的点点头?/SPAN> 魏h补充一下:“由于我们内部每个h的做事方法,都是各有一套绝z,程不一_l常D在工作对上下层通知协作出现问题。在水^部门沟通时Q也常常不流畅”。这是个大学刚毕业十分活泼的姑娘?/P>
“ؓ什么大家L觉得女的职员不好Q看多有灉|的一个小姑娘呀Q又是个好苗子。?/SPAN>GraphicalEditPart"教练"此时内心中的自我形象直就是华佗再世,那感觉真有点飘飘然乎Q?/SPAN>GraphicalEditPart先生不由自主地晃了晃脑袋?/SPAN> 接下来其它hUL发言Q?/P>
“工作经验很隄互交,U篏与提高。很隑֜部门U对工作程{进行优化,~Z专业化。?/P>
“我们经常要?/SPAN>Figure部门一起工作,跟踪操作执行。这很是费工作旉Q尤其是当某个工作需要很长时_或者中间经帔R要和客户交流反馈一D|_q样非常影响工作效率。?/SPAN> “对于客L问题很难快速根据现有的l验模式形成解决ҎQ虽然我们公司服务态度和广告质量高于其它公司,但是l常׃反应速度太慢Q活被其它公总中抢了去Q销售部门常常抱怨我们部门速度太慢。?/P>
“公司在相应客户需要操作过E中Q很N对客h个需求重新调整。客户常常抱怨在制作q程中很隑ց些小的改动。?/P>
…?/P>
׃GraphicalEditPart先生理师的带领,EditPart部门的会议L短有效?/SPAN>1个小时多几分钟大安把问题简明扼要的表达出来?/SPAN> 李环顾下四周“最后,?/SPAN>GraphicalEditPart部长ȝ一下今天的会议”?/SPAN> 一直沉默的GraphicalEditPart先生站了hQ十分精,也环了一下四周,清了清嗓子?/SPAN> “首先、我要自我检讨一下,q一q多L忙ؕ于紧急的事情当中,很久没有攉大家的徏议和反馈了,q十分不利于我们部门的发展。今天大家D出很多目前部门的问题Q这些充分反映了大家寚w门的业务熟悉E度Q我怿Q这是因为大家十分关注公司的未来Q希望公司越办越好,而不是怨天h的牢骚,可能有些领导会觉的这是找毛病寚wg满,在我q里Q我今天在一ơ明表明,我十斚w励大ӞƢ迎大家一些意见反馈给我,希望大家不仅仅是单反馈在工作中的直接困难Q而且l过自己的思考提炼写成简z的文书l我Q最好发挥自我主动和创造性提Z些变革徏议。这些东西将是我们部门及公司潜在的珍늚财富Q同时也是我们部门未来发展方向的一个重要部分。?/P>
“今天的会议大家主要是针Ҏ们部门的问题Q希望会后大家再从公司整体考虑q些问题Q以及未来扩?/SPAN>EditPart部门会带来什么问题,比如大家可以参考我们当初成立时遇到那些问题Q这些问题将来如何避免或减少。?/SPAN> “按计划Q会后,李Q小孙,丁Q小黄还有我Q将ȝ今天会议Q同时、制定出未来部门l织变革的策略。在此期_希望大家t跃的将自己的想法创意于我们交流。?/P>
“还有一件事情,今天要批评一下小丁同事,现在开会不q到了,但是Q不仅没发言、我看你从开会就一直看前天发的材料Qؓ什么不提前准备Q这是耽误大家每个人的旉Q下不ؓ例。今后、小李你在部门规章里加一条,部门开会前必须提前阅读理解会议材料Q凡q反者,包括我在内一律站C议室角落站着阅读完资料后Q在回会议位。我的话完了。?/P>
丁满脸通红Q不由地低着_双手捂住了腮帮,不敢喘气了,恨不得有个地~钻q去?/P>
“今天会议结束。”小李宣布?/P>
会后Ҏ孙的会议记录,很快的小李几个hȝZ下的一个鱼骨图?/P>
什么是因果图? 因果囄发明?Kaoru Ishikawa 是一名管理专Ӟ其最初的目的是改qR间的质量控制工作。正如以下示例所C,因果图还能表辑օ他环境中的因果关pR?BR> ׃因果囄形状很像鱼的骨架Q所以它又称作鱼骨图。鱼的脊骨上几根最大的鱼骨表示主要的原因类别?BR>例如Q在本例中,主要的原因类别有盎格鲁h/q人、丹麦h、萨克逊h和诺曼底人,q些U族体都想控制英格兎ͼ从而导致了该战争的爆发?/P>
主要cd中的较小鱼骨表示主要的原因。例如,在本例中Q在萨克逊hq个cd斚wQ黑斯h斯战争的主要原因在于公元 1051 q萨克逊王爱d华许诺将王位传给威廉一世?/P>
您还可以在主要原因上dơ要原因?/P>
]]>
我们合肥的整体Y件学术气氛不,大家~Z交流?br />
希望借此联系大家Q等版面有些z跃Ӟ我们l织举行非正式的技术沙龙活动,到时大家多多支持哦!
]]>
今天安装了一个bug 跟踪pȝQ?mantis。非常清爽,主要有以下好处:
登陆界面Q?br />
其中视图界面Q?br />
]]>
*?开始进入学习需要如何渐q掌握Java基础?
*?注意掌握那些Java的基cd?如何快速掌握?
*问:推荐两本入门书籍可否Q?/h2>
]]>
因此、需要查看Wiki的代码,同时、安装的MediaWiki中有BugQ其中知识链接发生错误。ؓ了调试,我大量用print语句看是那里的语句发生了左右Q最后、发现是其有一个对链接格式的配|出错。当然、出错何处ƈ不重要,重要的是Q我中间?print 语句发生中断Q网上知识点的链接 没有反应我新?print 语句Q而我全文索代码也未发行还有什么其他的地方 输出知识点的链接地址 Q后来我反复阅读代码Q?strong>发现MediaWiki在生成知识页面的时候,采用了Cache技术,MediaWiki的页面当其内部内容不发生变化Ӟ使用的是原Cache内的内容?br />后来在配|文件中扑ֈ使用此Cache的配|,关闭后,立刻发现我写?print内容?br />
因ؓ不知大家是否兛_此技术。如果、大家回复要求,我就整理发布一下MediaWiki的大体构架?img src ="http://www.tkk7.com/xdingding/aggbug/60046.html" width = "1" height = "1" />
]]>
]]>
]]>
]]>
GraphicalEditPart先生当天安排了部门及会议计划。经q?/SPAN>EditPart部门紧张有奏的准备会议讨论的资料Q第三天、按?/SPAN>8:30开会?BR>
GraphicalEditPart先生q如往常,准时提前5分钟坐在会议室前边角上。他喜欢部门的小伙子们,虽然q些伙子们做事情时常有些不周,但是他更ƣ赏他们的活力和富有创造激情。所以、每每开会时Q他更愿坐在旁边听这些小伙子们的意见Q“相比较当个威武的军队长官,我更意是一个严格又和蔼的优U教练?/SPAN>GraphicalEditPart先生常常如此提醒自己不要俎代庖?/SPAN>
文章来源:http://xdingding.cnblogs.com/archive/2005/12/07/292516.html
]]>
接下来我们以一个故事的方式来解决第三篇遗留下来问题Q?/SPAN>
已存在一个三角图形EditPartQ我们想重用?但是我们q需要增加(或删去)Ҏ可调整的Ҏ,如何保证无需重新建立一个新的EditPartQ或者做Z陋的l承Q当功能不断l合后,出现无数子EditPartc?
如何由框架自动完成Undo及Redo功能Q?/P>
话说在某个跨国时媒体集团中国区q告部门Q这是一家主营^面广告的q告公司Q听说董事长是个q仅办百的老头GraphicalEditor先生Q来自赫赫有名的eclipse基金财团Q,有目前主要有两个子部?/SPAN>EditPart(q告{划?/SPAN>)?/SPAN>Figuer(q面设计?/SPAN>)?/SPAN>
EditPart部长是一位中q充满信心和zdGraphicalEditPart先生?/SPAN>
Figuer部长是一位与部门名同名的q告主设计师丽青春?/SPAN>Figure姐?/SPAN>
EditPart部长GraphicalEditPart目前主要肩负着三项MQ?/SPAN>
׃公司扩大了业务,投入市场的品种cL以往增加了三倍,EditPart部长工作变得异常J忙有些快压垮了Q感觉自己快成ؓ整日驮着重物q迈的驴子,“是不是自己老了”GraphicalEditPart先生开始常常怀疑自׃?/SPAN>
q天Q?/SPAN>EditPart部长收到总部一信Q?/SPAN>
GraphicalEditPart先生Q?/P>
首先我代表公司感谢您q些q勤奋出色的工作。我们公司在中国短短三年的营业额增长了四倍,同时EditPart中国部门在此期间获得了公司最有活力部门奖Q这些成l都与您的努力是分不开的。据我们了解Q您?/SPAN>EditPart部门q三q中Q实施了几项富有创意的制度改革,如成?/SPAN>Tool情报攉部门Q推q后大大提高了整个公?/SPAN>EditPart部门业务处理能力。ؓ了进一步扩大业务,公司在未来的两年里将在世界各地尤其是中国增加40%的区域广告部门,正如您所知道目前公司对于EditPart部门的组l规划以及责d度还有很多不完善之处Q这十分不利于区域部门扩展的计划。故我委托您做出《未来广告部l织的规划》计划书Q本月底邀h来总部参加l织规划与变革方案的评审会,届时会Ҏ的计划书q行评审。如通过评审Q公司所有广告部会按照您的计划书进行变革?/SPAN>
愿世界明天的舞収ͼ因我们而变得更加美好、充满激情与惌
CEO GEF
“噢Q太了Q这信来的真是及时Q如果再l箋如此的话Q我要压垮了Q只好另谋它职了。嗯Q这回我要好好地写这个计划书。这Pw上担子ȝ有减ȝ希望。有上司的赏识,我要一展宏图一番。”GraphicalEditPart不由自主拍了下桌子自a自语后,张开双臂Q砰C下Ԓ靠在椅背上,深深地出了口气,双目d工作的压力似乎片刻间消失Q顺手戴上了他那十分h的太阳镜Q小声打开旁边CDQ噢Q夏威夷之夜Q感觉自己此时就在夏威夷带着墨镜w在金黄、松软、温暖的沙WQ吹着口哨Q热情似火的太阳I过太阳镜,过眼皮Q将几缕模糊的光芒带入眼中(其实是他那高瓦的吊灯Q,风习习Q旁边的电风扇)Q在享受着q片d静天堂感觉,Ȁ情创意不断涌出,啊,久违了的感觉?/SPAN>
开qԌq速的打开他喜q脑图软g -- Mindjet ManagerQ记录下脑中的构思,M如下计划要点
Q?/SPAN>
看来GraphicalEditPart先生要大q一场,Ʋ知详情Q请听下回分?IMG src="http://xdingding.cnblogs.com/Emoticons/emsmiled.gif" align=absMiddle border=0>
GEF源码分析Q四Q?/SPAN> GEF 消息转义 ___ Tool的作?/SPAN>
接着上一节:
我们先解军_下问题:
在界面操作过E中Q我们希望面对的是边框调整事Ӟ囑ŞUd事gQ或者是~辑文本事gQ而不是原始的鼠标和键盘事Ӟ
术语定义Q?/P>
pȝUI事gQ?/SPAN> 一般由某些计算ZhZ互硬件发ZPq且l操作系l理解后产生的事Ӟ例如Q原始的鼠标的移动、点d键盘的敲M件等?/SPAN>
UI业务语义事gQ?/SPAN> ql?/SPAN>UI事g和其?/SPAN>UI业务语义事g触发Q由UI业务代码理解后生的事gQ操作系l不可理解,同时无Q何领域的业务语义Q,?/SPAN>2D囑Ş的尺寸调_2D囑Ş的点击,2D囑Ş的移动?/SPAN>
Q其实不仅限于事件的转义Q包?/SPAN>UI的改变,也需要由pȝUI语义转换?/SPAN>UI业务语义来用)
UI业务语义事g?/SPAN>Controller控制中的优点是易于理解、维护和扩充Q具体的主要有以下方面:
a.减少pȝUI事g判断逻辑部分代码的重复。比如在Controller部分代码无需分步着大量逻辑重复的代码,当鼠标移动时d断究竟是一?/SPAN>2D囑Ş的尺寸改变,q是一?/SPAN>2D囑Ş的移动,q是一l?/SPAN>2D囑Ş的移动,q是2D囑ŞDragAndDrop的动作?/SPAN>
b.Controller部分的代码语义明。在Controller内部处理代码和接口中直接面对的是UI业务语义Q如囑Ş的移动,囑Ş的尺寸改变,q样、代码易于理解、调试等?/SPAN>
b.Controller部分代码无需为系l?/SPAN>UI事g保存状态。如2D囑Ş的移动中Q如果这些事件直接在Controller中处理,从开?/SPAN>MouseDown,?/SPAN>MouseMoveQ到MouseUpq程中,?/SPAN>Controller中要集中保留q样众多状态,极易造成Controller代码具体多头职责的症Ӟ从而患上严重的_分裂:)?/SPAN>
于是?/SPAN>GEF?/SPAN>FrameWork有给Z下的解决ҎQ?/SPAN>
?/SPAN>A
如上?/SPAN>AQ?/SPAN>
GEF通过Tools(?/SPAN>interface?/SPAN>Tool)Q当然在视图上的Menu?/SPAN>Toolbar是通过Action发出Q这个是eclipse?/SPAN>Workbench机制Q在此就不讨Z。以下是Tool的类l承树:
?/SPAN>B
从上?/SPAN>B可以看出
?/SPAN>Tooll承的这些类均处理一个或者一c?/SPAN>UI业务语义事gQ其中需要保留中间状态的子类均以XXXTracker形式出现?/SPAN>
首先q些Tool的实现类通过Tool的接口(上图双Q,接收界面来的事gQ然后调用内?/SPAN>handleXXXQ这样通过内部函数getTargetRequest()[createTargetRequest()]和getSourceRequest()[createSourceRequest()]Q把pȝUI事g转换?/SPAN>UI业务语义事g?/SPAN>RequestQ如?/SPAN>CQ。至?/SPAN>Tool会通过调用相关联的EditPart的接口将UI业务语义事g通知?/SPAN>EditPart中。于是在Controller(EditPart)中仅仅需要理解处?/SPAN>Request对象?/SPAN>
?/SPAN>C
下面?/SPAN>ResizeTracker代码ZQ?/SPAN>
class ResizeTracker
protected Request createSourceRequest() {
ChangeBoundsRequest request;
request = new ChangeBoundsRequest(REQ_RESIZE);
request.setResizeDirection(getResizeDirection());
return request;
}
protected Command getCommand() {
List editparts = getOperationSet();
EditPart part;
CompoundCommand command = new CompoundCommand();
command.setDebugLabel("Resize Handle Tracker");//$NON-NLS-1$
for (int i = 0; i < editparts.size(); i++) {
part = (EditPart)editparts.get(i);
command.add(part.getCommand(getSourceRequest()));
}
return command.unwrap();
}
protected void eraseTargetFeedback() {
if (!getFlag(FLAG_TARGET_FEEDBACK))
return;
if (getTargetEditPart() != null)
getTargetEditPart().eraseTargetFeedback(getSourceRequest());
setFlag(FLAG_TARGET_FEEDBACK, false);
}
protected boolean handleButtonUp(int button) {
if (stateTransition(STATE_DRAG_IN_PROGRESS, STATE_TERMINAL)) {
eraseSourceFeedback();
eraseTargetFeedback();
performDrag();
}
return true;
}
最后还有个问题?BR>
Toolq些事g接口Q如何从Viewer传递过来的呢?
我画了一个简要的cd
?/SPAN>D
参照上图Q下面罗列重要代码:
大家主要以下两方?/P>
一、创些关键事件处理链的过E(注意图上的粗体文字)Q?/P>
二、消息从SWT?/SPAN>Canvas实例传递到Toolq程Q图D中注释标{序Q;
class GraphicalEditor
public void createPartControl(Composite parent) {
createGraphicalViewer(parent);
}
protected void createGraphicalViewer(Composite parent) {
GraphicalViewer viewer = new ScrollingGraphicalViewer();
viewer.createControl(parent);
setGraphicalViewer(viewer);
configureGraphicalViewer();
hookGraphicalViewer();
initializeGraphicalViewer();
}
protected void setGraphicalViewer(GraphicalViewer viewer) {
getEditDomain().addViewer(viewer);
this.graphicalViewer = viewer;
}
class EditDomain
public void addViewer(EditPartViewer viewer) {
viewer.setEditDomain(this);
if (!viewers.contains(viewer))
viewers.add(viewer);
}
class GraphicalViewerImpl
public void setEditDomain(EditDomain domain) {
super.setEditDomain(domain);
// Set the new event dispatcher, even if the new domain is null. This will dispose
// the old event dispatcher.
getLightweightSystem()
.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));
}
private final LightweightSystem lws = createLightweightSystem();
class ScrollingGraphicalViewer
public void setEditDomain(EditDomain domain) {
super.setEditDomain(domain);
// Set the new event dispatcher, even if the new domain is null. This will dispose
// the old event dispatcher.
getLightweightSystem()
.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));
}
class LightweightSystem
public void setEventDispatcher(EventDispatcher dispatcher) {
this.dispatcher = dispatcher; //在此Shapes例子中是DomainEventDispatcher
dispatcher.setRoot(root);
dispatcher.setControl(canvas);
}
protected void addListeners() {
EventHandler handler = createEventHandler();
canvas.getAccessible().addAccessibleListener(handler);
canvas.getAccessible().addAccessibleControlListener(handler);
canvas.addMouseListener(handler);
canvas.addMouseMoveListener(handler);
canvas.addMouseTrackListener(handler);
canvas.addKeyListener(handler);
canvas.addTraverseListener(handler);
canvas.addFocusListener(handler);
canvas.addListener(SWT.MouseWheel, handler);
…?/P>
setEventDispatcher(getEventDispatcher());
}
class EventHandler
implements MouseMoveListener, MouseListener, AccessibleControlListener, KeyListener,
TraverseListener, FocusListener, AccessibleListener, MouseTrackListener,
Listener
{
?/P>
public void keyPressed(KeyEvent e) {
//在此Shapes例子中是DomainEventDispatcher
getEventDispatcher().dispatchKeyPressed(e);
}
?/P>
public void mouseDoubleClick(MouseEvent e) {
getEventDispatcher().dispatchMouseDoubleClicked(e);
}
?/P>
public void mouseMove(MouseEvent e) {
getEventDispatcher().dispatchMouseMoved(e);
}
public void mouseUp(MouseEvent e) {
getEventDispatcher().dispatchMouseReleased(e);
}
?/P>
}
q样、在?/SPAN>A?/SPAN>Request发送到EditPart机制做了要的探讨?/SPAN>
学习?/SPAN>Tool产生Request的机Ӟ可以帮助我们调试GEFQ同时如果在大家自己的程序中需要有新的UI交互cdQ也可以试着建立自己?/SPAN>ToolcM生新?/SPAN>RequestQ这样在自己?/SPAN>EditPart产生对应?/SPAN>Command,q样可以处理实现新?/SPAN>UI交互cd?/SPAN>
在下一我们探讨一下有兛_A中的EditPart如何产生CommandQ以及执?/SPAN>Command问题?/SPAN>
包含GEF的Editor创徏时序?/STRONG>
?/SPAN>eclipse|站上例?A >A Shape Diagram EditorZ
GEF如同其他的一?/SPAN>framework一P是一个复杂庞大(有点夸张Q的Q当我们想用驾驭它Ӟ必d面的理解其整体构架及其运作过E。这需要我们的毅力和敏锐。旅途开始了?
GEF主要的Q务是针对2D囑Ş~辑操作Q如下图?/SPAN>
Z?/SPAN>GEF能够q泛的用于种cȝ?/SPAN>2D囑Ş~辑领域Q?/SPAN>GEF必d立一个严格的易扩?/SPAN>/易组?/SPAN>/易重用的MVC框架Q当然这U分解细化功能对象的Ҏ思想Q我们可以用在其它的地方Q其它领域、其他语a?/SPAN>C#上)?/SPAN>
那么如果设计 q个 严格?/SPAN>MVC框架(对于Model是严格的独立Q它不依赖与View?/SPAN>Controller) 以及 此框?/SPAN> 如何 辑ֈ 易扩?/SPAN>/易组?/SPAN>/易重?/SPAN> 的特性。下面我按照自己拙劣的思\Q以麻雀之眼?/SPAN>鸉K之志?IMG src="http://xdingding.cnblogs.com/Emoticons/emembarrassed.gif" align=absMiddle border=0>
对于MVC?/SPAN>
View部分Q?/SPAN>GEF理所当然要用自家的东东Draw2D。利?/SPAN>Draw2D?/SPAN>Figuer作ؓ自己?/SPAN>View?/SPAN>
Model部分Q?/SPAN>往往内部包含了千差万别、不可预知的商业信息。因此?/SPAN>GEF框架应该量减少U束Q在下面详l说明约束)?/SPAN>
Controller部分Q?/SPAN>EditPart/Draw2D?/SPAN>Figure/Modelq三个树状对象模型,?/SPAN>EditPart中将建立了与其对应的Draw2D?/SPAN>Figure/Modell点 建立一一兌的关pR?/SPAN>
q样产生的构架如下:
思考:
Z?/SPAN>Controller要同View一样采用树状结构呢Q?/SPAN>
?/SPAN>Controller以树状的形式存在Q这样便于功能分解(q个道理有点?/SPAN> 在类设计?/SPAN> 复合优于l承 一般)
q样每一l点?/SPAN>Controller(?/SPAN>EditPart) 仅需要处?/SPAN>
其当用户需要在囑Ş界面~辑界面中,需要用多U不?/SPAN>UI行ؓ规则?/SPAN>2D元素Q例如不同的形状块,不同行ؓ的连U等Q组合来完成工作Ӟ例如cMVisioq样的界面)Q这U构架的优势显露无疑?/SPAN>
未完待箋?(下面要探讨如何生上qC个树状模型等?/SPAN>)
GEF学习W记Q一Q?/SPAN> eclipse?/SPAN>GEF相关目说明
首先、感?A >八进?/A>的辛勤劳动和奉献。这几天开始对GEF发生兴趣Q?A >八进制的GEFpdҎ学这些的帮助很大入门很快。自׃顺手把周末学习的东西记录下来。帮助后来学人。我会把q几天所学陆l写出希望大家支持。目前、正在ؓ八进制例子发愁,我对NodePart增加?/SPAN>ResizeEditPolicyQ但是不知ؓ何鼠标拖动时有个灰色的区域在随着变化Q但鼠标释放ӞNodeFigure的尺怸发生变化Q是否是因ؓ?/SPAN>refreshVisuals中固化了SizeQ代码学习中?
eclipse?/SPAN>GEF相关目说明?/SPAN>
各项目的介:
Draw2DQ?/SPAN>建立?/SPAN>2l的囑Ş?/SPAN>(树状囑Ş部gFigure)Q负责显C?/SPAN>2l的囑Ş展示?BR>
GEFQ?/SPAN> Q?/SPAN>Graphical Editing FrameworkQ?/SPAN>建立标准?/SPAN>MVC构架Q代码利?/SPAN>Draw2D作ؓ自己?/SPAN>View部分Q主要代码实现复杂的树状(?/SPAN>Model分别对应) 的控制器。实现的框架h很高的可复用{特性,例如Q将囑Ş部g功能分解为多?/SPAN>EditPolicyQ这样用者可以通过installEditPolicy接口来定Ӟ以及扩充自己的某一功能特征?/SPAN>
EMF: Q?/SPAN>Eclipse Modeling FrameworkQ?/SPAN>首先在一个轻量目以及目初期开发,Model常常采用拥有Property?/SPAN>Java对象来简单明了表C【即 Plain Old Java Objects (POJOs)】?/SPAN>EMF定义了一套Ecore元模型,使得Modelh易于l护、易于扩充、易于数据交换等Ҏ的Model Framwork。因此、在实际中大型的目中往往会采?/SPAN>Draw2DQ?/SPAN>GEFQ?/SPAN>EMF的方式来实现整体?/SPAN>MVC模式。例如:ROSE的最新版?/SPAN> IBM.Rational.Software.Architect是采用了这U构架?/SPAN>
GMFQ?/SPAN> Q?/SPAN>Graphical Modeling Framework Q?/SPAN>使用?/SPAN>GEF?/SPAN>EMFQ徏立了两个之间的桥梁框Ӟ同时实现了一些领域上的典范应用,?/SPAN>UML图,甘特图,脑图{。(目正在q行中这些功能还未完备。可以用来参考以实现自己的一个标准的GEFQ?/SPAN>EMF的应用)?/SPAN>
各项目依赖关p:
如上图:使用者可以有以下几种用法Q?/P>
EMF: Model理?/SPAN>
Draw2D: 二维囑Ş展现
Draw2D Q?/SPAN> GEF: 二维囑Ş的简单编辑模?/SPAN>
Draw2D Q?/SPAN> GEF Q?/SPAN> EMFQ?/SPAN> 二维囑Ş的编辑模?/SPAN>
Draw2D Q?/SPAN> GEF Q?/SPAN> EMF Q?/SPAN> GMFQ基?/SPAN>GMF提供的图形编辑功能之上扩?BR>
打造Y件团?/P>
我们q是一个团队吗Q?/P>
共同认可的明的目标
合理的分工与协作
U极的参?/P>
互相信Q
良好的信息沟?/P>
高度的凝聚力与民L?/P>
学习是一U经常化的活?/P>
目团队的作?/P>
Q?Q更有效地实现目?/P>
Q?Q可满成员心理需?/P>
Q?Q个h得到更快的进?/P>
Q?Q较强的凝聚?/P>
Q?Q提高决{的质量
打造Y件团?/P>
我们是怎样的团队?
不同条g下如何选择适应的团队文化?
球队团队文化更适于软g开发团?/P>
团队分工交流中我们有那些方式与之不同Q?/P>
打造Y件团?/P>
目理仅仅是项目经理的事情吗?Z么?
软g团队中项目经理应该如同带光|仗军官班长?q是教练Q?/P>
Z么?军官班长和教l在团队q作中有何不同之处?
何时需要特U分队的q作方式Q?/P>
打造Y件团?/P>
目理Q-N、管理轮?/P>
目l理Q-l团、掌c管家婆
打造Y件团?/P>
共同认知
合作才能成功
目l成员Ş成团队不仅是目成功的保证而且也能满成员的需?/P>
打造Y件团?/P>
Ȁ励团?/P>
让大家主动投?/P>
打造Y件团?/P>
从项目开始的W一?/P>
从项目计划的制定徏立一个共同目标和Ȁ?#8220;团队”zd
打造Y件团?/P>
认清自我、审视团?/P>
量力而行
打造Y件团?/P>
合适的人在合适的位置为项目的基础
注意人员比例
因才用h善驱?/P>
打造Y件团?/P>
U观全局、把握重?/P>
扑և目中关键点和关键风险,形成单有效解x?/P>
目负责人处于夹~位|?/P>
Ҏ来的目标有坚强的意志
建立q等气氛团队、Ş成团队精?/P>
要权威,不要霸权
去除位置在上心理
dL、不强功?/P>
为大家服务、打造轻松有效开发环?/P>
认真负责Q勇于承认错误,勇于承担责Q?/P>
对上U尽量承担责任,内部处理具体问题
协调大家有效沟通?/P>
建立透明的监督检查机制。如特色监督组、FDDq度板等?/P>
从小处徏立团队规则?/P>
菩萨慈眉Q金刚怒目
合理公^分配d
培训引导大家
合理安排d
有效的时间管?/P>
多多鼓励表扬
一切表扬在先,公证有效有限的批评?/P>
x大家个h生活Q了解团员情感状态?/P>
不要加班?/P>
目开发过E中Q不断监视调整风险列表;
善于观察、保持警觉提前发现问题;
学会和各U官僚主义等打交?/P>
关键时勇于对此质疑、有力抵?/P>
勇于面对困难
关键时要有壮士断腕式果断Q必要时砍去一些十分诱Z不是核心必须的功能点?/P>
不能q分q求完美
开始和中间阶段要和大家L一下,鼓舞士气。(管可能有种U滞后压力和不良现状Q?/P>
软g领域更是不断更新成长、没有长期避风港.
充满好奇、勇于探?/P>
和大家不断共同自我学习培训、提高,怺学习
对于新的开发思想和方式,要在范围实?/P>
愿大家Q通过长期共同努力。打造出一个有共同的认知,熟悉内部工作程、沟通方式、思考讨论模式等高素质高效的团队