软件这行,如果干得有滋味,也许会有这种体会:软件就是把一些做事的规则换一种表达而已。就说说我的体会吧。
分配任务和反馈:Request/Response模式,还是Observer(观察者)模式?
因为项目组有七八人,项目上线后,经常有一些bug要修改,开始是这样的:我提出修改建议,开发人员修改,感觉修改差不多后,我再询问开发人员,他答复。如果有五六人要沟通:通知业务人员改内容,通知设计师改界面,自己一忙起来,就忘了检查。
当然了,要是团队每个人都积极主动也没事,但如果当事人很主动,但事情一多也忘了反馈那咋办?问题出来了,看来要寻找一种Solution。
搞软件这行,都有一种职业思维,马上想到BugZilla、JIRA、Mantis,这三种我都玩得很熟,后两种自己部署实施过,用过几年。但感觉对于我们项目组:太重了。填个bug要打开浏览器,输入网址,新建问题,描述问题,提交,通知相关人…,很累,特别是业务员,实在忍受不了这种折腾。
用软件解决前,先想想我们的问题究竟是什么?
问题:负责人和执行者,怎么建立一种有效、高效的问题跟踪反馈模式?
我上面描述的沟通模式,不知大家抽象出来了没有:Request/Reponse模式,主动获取,就是我们敲www.kaixin001.com,然后出现一堆骚扰信息的界面。这是一种典型的Pull模式。
怎么改进我刚才说的问题呢?
大家可能都想到了:让执行者每次处理完毕后,主动通知负责人,并且将这形成一个制度。负责人分配任务后,等着被动告知就行了。
是不是很像Observer模式:定义一个对象间的一种一对多的依赖关系,当一个对象状态发生变化时,所有依赖于它的对象者得到通知并自动更新。只不过,我的情况是:多个对象状态发生改变,我这个依赖他们的对象得到通知并自动更新(知道问题被修复,可以重新部署了)。
在以前的沟通模式中,如果我有6件事情要跟踪,总共需要6+6次主动请求,新的沟通模式:6次主动,6次被动,压力小很多。
刚才说到了访问kaixin001是一种典型的Pull模式,如果我们每天要访问的网站一多,就很累,后来出现了RSS订阅,Pull变成的Push,就像Foxmail自动收信一样,轻松多了。这和我上面的例子一致。
上面这个问题还没结呢,因为我还是比较累。
ok,我又想到了一种沟通模式,并付诸了实践,效果很不错。
Bug处理:星型模式还是网状模式? Chain of Responsibility (责任链)模式
上面这种沟通模式,大概应该知道,是一种星型沟通,也就是说,我站在中间,大家都和我沟通,都对我负责。
然后我想到了另外一种模式,并且一实施,团队沟通起来非常愉快。因为以上的模式,是上下级沟通,毕竟有些距离。
打个比方吧,开发一个电子商务网站,一个团队有做原型设计的,有做界面的,有做程序开发的,有做内容的。就说这四种角色吧,如果我是负责人,也就是测试人员,发现产品列表页排序不易用,那么我只需要向界面设计师阐述清楚问题即可,如果需要后台程序修改,那么他通知开发人员,开发人员发现内容,比如产品排序标志如“热门”需要勾上,找内容编辑。
这样,一个责任链就形成了。是不是有点像Chain of Responsibility (责任链)模式?(使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止),也许有点牵强。
从结构上说,是网络模式:去中心化,去掉我这个中心。
沟通从6+6次主动,到6主动+6被动,到2次主被动就够了。
我算解脱了,我可以专注于需求分析和功能测试这些更接近用户的工作。
因为是平级关系,沟通更顺畅些,因为沟通,关系也更亲密。
财务报销:模板(Template)模式
大家是不是在公司财务报销上总是感觉不爽,去财务室报销,不是收据不行,就是发票黏贴不对,或者报销时间不对,总之,财务总是折磨我们这些写程序的。
我们是这么做的:公司建议每个人在每月第四周前三天把发票啥的准备好,到时候部门行政MM来收(当然大企业这样做可能不行), 是不是有种被尊重的感觉?
这种思路是从模板模式学来的:定义一个操作中算法的骨架,将一些步骤的执行延迟到子类中。
这么解释吧:定义的骨架,就是我们的财务报销制度,报销步骤也就是报销者准备账单,被动等待被执行(递材料、收现金)。
也许有人会问,原来那种不算模板模式?不太算,因为它的模板定义不清晰(出现报销时间错过),而且,后来这种模板方法要处理的“逻辑”更少一些。模板方法的核心,就是“被执行”。
再举个例子,就是部门间沟通和责任界定的事情。
责任明确:高内聚、低耦合
做过管理的大概都知道,部门间协作较部门内困难得多,因为部门间利益很难制衡,打个比方,你开个户外店,别人试了你的望远镜半个小时,你有权力要求别人一定购买吗?
我就遇到过这种问题:网站要经常更新,更新是业务部那边的事情,我经常发现一些问题,比如产品价格过时,产品描述错别字。我该找谁?七八个业务员,难道我要一个个知道哪块归谁负责?并且通知其中某个人吗?再说,他可能会说,凭啥要听你的?
当然,如果企业有优秀的协作共赢文化,业务员可能会觉得你在帮他,但大多数情况呢?
也许我直接找负责人就不是最有效的?怎么做?先建立一套网站运营责任链,比如运营过程中,网站任何内容错误,如果没有及时反馈给IT部,是业务人员的责任。
如果我要提出业务问题,直接提给业务部产品经理,他确认、修改后给我反馈。我不需要知道修改工作,比如上传一张图片,是由谁来做。
一个部门,对外应该是高内聚,低耦合的,这里面蕴含的一个核心思想,就是职责分离。
这也符合软件上的面向接口编程:我和业务部沟通接口只应该是产品经理,他们内部沟通,对于其它部门来说,是private的。
先就举这几个例子吧。像软件分层架构思想,在建立高效的组织结构方面,也可以借鉴一下。因为软件本身也是一个组织、生命体。
组织有生命周期,也有从简单到复杂到衰亡的过程。组织有自我修复功能,健壮的软件也会有,比如优秀的异常处理机制。
分享到:
相关推荐
这个压缩包文件"设计模式(包含5个设计模式)含源代码报告.rar"显然是一份宝贵的资源,它涵盖了五个核心的设计模式,并附带了详细的类图、源代码以及文档报告,这对于学习和理解设计模式至关重要。 首先,我们要探讨...
描述中提到的".net设计模式具体的代码应用",意味着这份资源包含.NET语言(可能是C#)编写的代码示例,旨在展示设计模式如何在实际项目中发挥作用。"不再是纸上谈兵"强调了这些代码示例不是理论性的讲解,而是具有...
在这个“设计模式项目训练”中,我们将会深入理解和应用这些模式,以应对复杂的软件开发挑战。这个训练项目的目标是提高你的编程能力和软件架构设计水平,帮助你更好地理解和运用设计模式。 设计模式分为三大类:...
在设计模式项目中,这些Jar文件可能包含了一些已经实现了特定设计模式的库,以便开发者可以直接引用,快速构建符合设计模式的代码结构。 例如,Spring框架就是一个广泛使用的Java库,它内置了许多设计模式,如工厂...
在本设计模式课程设计中,我们重点探讨了五个核心的设计模式:原型模式、单例模式、抽象工厂模式、代理模式和建造者模式。...在实际项目中,开发者应根据具体需求选择合适的设计模式,以实现高效、优雅的解决方案。
这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为初学者提供了一个良好的实践平台。 1. **单例模式**: 单例模式是一种确保一个类只有一个实例并提供全局访问点的设计模式。...
下面将详细阐述这四种设计模式的概念、作用以及在实际项目中的应用。 **1. 单例模式** 单例模式是一种限制类实例化次数为一个的设计模式,常用于全局共享对象,如数据库连接池、线程池等。在Java中实现单例模式有...
设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而提炼出的可复用的解决方案模板。这些模式描述了在特定上下文中如何进行对象间的交互和结构,以达到良好的软件设计原则,如开闭原则、单一...
这是我的设计模式作业:运用5个以上的设计模式创建一个系统。其中包括:1.单例模式 2.原型模式 3.抽象工厂模式+模板方法模式 4.代理模式 5.策略模式 详见博文:...
EPC模式中,承包商承担项目的设计、采购和施工全过程,直至交付使用。这种模式适用于大型复杂项目,如石油、化工等,能够为业主提供一站式服务。但同样,业主对设计的控制力较弱,且可能面临总价合同带来的风险。 ...
在这个项目中,我们将探讨Unity3D与设计模式的结合,以及在游戏开发中如何实现高效、可维护的代码。 1. **Unity3D基础**: Unity3D是一款跨平台的游戏开发工具,支持2D和3D场景创建。它的脚本语言主要是C#,这使得...
在软件开发领域,设计模式和体系结构是两个至关重要的概念,尤其在大型项目中,它们对于软件的可维护性、可扩展性和可复用性起着决定性的作用。本项目——“服装管理系统”是一个很好的实践案例,让我们深入探讨其中...
《Java设计模式》则可能专门针对Java语言,讲解如何在Java项目中有效地应用这些设计模式。Java作为一种多范式语言,其面向对象特性使其特别适合应用设计模式。书中可能包含了大量实例,演示如何在实际Java代码中实现...
Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的模板。这些模式来自于实际开发中的经验总结,可以帮助开发者更高效、更灵活地编写可复用和可维护的代码。在Java中,设计模式分为三...
在本项目“设计模式期末大作业 ToFu”中,开发者运用了多种设计模式来构建一个豆腐商店的应用。这个应用展示了如何在实际编程中灵活运用设计模式来提高代码的可读性、可维护性和可扩展性。以下是每个设计模式的详细...
《软件项目管理期末大作业——学生宿舍信息管理系统》是一份以软件工程中的项目管理理论为基础,结合实际操作的课程作业。这份作业的核心是设计并实现一个用于管理学生宿舍信息的系统,旨在提升学校后勤部门对学生...
在线商城项目源程序与BBS论坛社区项目源码中,可能会广泛运用到这些设计模式。比如,购物车功能可能涉及策略模式,不同的折扣策略可以通过接口实现;用户注册和登录可能应用工厂模式,创建不同的用户类型;论坛的...
在完成这个作业的过程中,学生应该深入理解每个模式的核心思想,编写示例代码来展示如何在实际项目中应用这些模式,同时分析不同模式的优缺点,以及在何种场景下选择合适的设计模式。 通过这样的学习和实践,学生...
在C++项目中,设计模式可用于构建模块化的、可扩展的系统,特别是在大型软件开发中,设计模式是保持代码结构清晰、易于维护的关键。 6. **高清资源的价值** 高清晰度的电子版资源,如提供的PDF,可以提供更好的...
在本课程设计中,我们将基于设计模式来构建一个画图程序。设计模式是软件工程中的一种最佳实践,它提供了一种解决常见问题的标准化方法,...对于学习和理解设计模式及其在实际项目中的应用,这是一个很好的实践案例。