随笔-60  评论-98  文章-0  trackbacks-0

Chapter说到纠缠不清的工程管理器的问题。
很多模块都需要在工程打开之时,获取一定的信息,比如工程是新建的还是打开的,临时目录在哪里,工程目录又在哪里。
工程管理模块就像个奶妈,把一系列的信息从XML文件或者从用户刚刚输入的信息都进来,然后再一个个的去NotifyProjectOpen。工程关闭之时在挨个通知他们要关灯了,NotifyProjectClose。怪不得耦合度高啊,全是被动式初始化,能不高吗?
修改方案:
干脆,奶妈下岗吧,最好自己的事,别人的事少管。有了状况通知专门的部门专门的人去管。ProjectMgr负责解析工程文件,并把自己的指针注册到InterfaceMgr,有MagicString的都可获取。需要一个通信协议,让各位断奶的模块来获取自己需要的东西。有两种打算,一个就是通过一个结构体,把工程的消息全部装到里面,谁要谁就调ProjectMgr的接口要,拿回去自己挑,需要什么就读出什么来,自个初始化自个。各个数据结构对象弄成static的,工程打开或参数改变的时候ProjectMgr更新它,然后ProjectMgr通知相关部门让娃娃们都来取最新的工程信息。第二个打算就是,ProjectManager只提供工程文件的路径,谁要给谁,谁需要谁自己解析去,这样把耦合彻底解开了。

娃娃们还需要长点本事才能做到主动初始化,怎么办呢?找个好师傅吧。CPlugIn,中间的方法NotifyProjectOpen, NotifyProjectClose都做了是实现,全部直接return。谁需要初始化自己,找InterfaceMgr要PrjMgr指针,找PrjMgr要信息,自个初始化自个去。

谁是相关部门呢?
InterfaceMgr人人向他注册指针,可以兼职。娃娃注册自己时,同时把自己的父类指针CPlugIn也注册进去。PrjMgr一来通知,InterfaceMgr根据指针列表全部触发。这不是很多态,很命令模式,很OO吗?

----------------------------------------------------------
剩下的部门是最复杂的,所有的逻辑都在界面里,实现类只有一个Show。有的部分一个连贯的动作,分解到两个类中。数据库的接口,层次不清,也很头痛啊。

posted on 2008-08-14 17:47 创建更好的解决方案 阅读(1143) 评论(0)  编辑 收藏 引用 所属分类: C++专栏软件设计

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理