设计模式学习的几点建议

如如何才能更好地抓住设计思想和本质?

深入理解和多加实践。建议大家的一种模式学习流程如下:先通过一些生活实例引入某种设计模式,然后学习该模式的动机、定义和结构,再学习一两个使用该模式的典型实例,接下来学习该模式的一些扩展知识以及模式的优缺点和适用场景,最后再学会在项目开发中应用所学模式。

 

模式使用的最高境界是你已经不知道某个具体设计模式的定义和结构,但你会灵活自如地选择一种设计模式来解决某个问题,要达到这个境界需要不断沉淀与积累,因此对模式的学习不要急于求成。在学习过程中我得重复那句话,千万不要滥用模式。每个模式都有自己的适用场景,不能为了使用模式而使用模式,滥用模式不如不用模式,很有可能是一堆垃圾代码。

 

选择设计模式的重点在于我们更加关注哪个或哪些质量属性,是可扩展性、可复用性还是性能,这需要我们做一些权衡和折中,大部分基于面向对象的设计模式重点考虑的还是可复用性和可维护性。因此,大部分设计模式可以改善系统的可复用性和可维护性,这句话是没有问题的,但是对于其他质量属性的改善,我们就只能逐个模式进行分析了。

 

设计模式并不难学,难的是如何成功应用

每一个模式我们至少应该掌握如下几点:这个设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,在使用时要注意什么。当你能够回答上述所有问题时,恭喜你,你了解一个设计模式了。

· 学会思考和对比使用模式之前和使用模式之后,软件设计和代码结构是如何发生改变的.

· 多交流,和别人讨论和分享设计方案。

软件架构设计需要考虑的因素有哪些?如何才能做好架构设计?

软件架构是软件工程一个很重要的分支,随着软件规模的扩大和软件寿命的延长,软件架构也越发重要。好的架构能够决定软件的成败。软件架构不只是简单的分层或者划分模块,它包括更多的内容,例如需求确认、系统分解、架构风格的选择(B/S还是C/S)、技术选型(Java还是.net,Oracle还是MySQL等)、物理架构设计、数据架构设计、逻辑架构设计等等,通常架构师还要参与包设计、核心模块设计以及类设计等概要设计和详细设计工作。正因为软件架构设计涉及的内容相当多,因此需要考虑的因素也很多。

软件架构设计需要考虑的问题包括需求、成本、进度、团队人员的素质等等,我觉得首先应该考虑的是需求,俗话说:需求进、架构出。如果没有深入分析需求,往往难以得到好的架构,在分析需求时除了功能需求外,还要考虑一些非功能需求,包括是否要与第三方系统兼容、是否要考虑到数据迁移、是否要考虑到平台的多样性等等,非功能需要中很多因素也会影响到架构,例如安全性、性能等等,因此好的架构师应该尽量多参与需求分析,听听客户的想法,需求是影响架构最大的因素,架构风格的选择、技术选型等都与需求息息相关。除此之外,成本、进度以及人员素质等对架构的影响也很大,因此在架构设计的时候也需要充分考虑。没有完美的设计方案,无论是SAAM还是ATAM等架构评估方法,其实都是一种折中的方法,无法使每一个因素都达到最优,所以我们要全盘考虑,具体问题具体分析,找出当前应用最合适的一种设计方案。

对于如何做好架构设计,我个人建议如下:

· 深入理解需求,进一步确认和细化需求,例如了解当前系统是否需要和别的系统交互,通过什么接口来交互,在交互的时候数据如何发送和接收等等。

· 全面考虑非功能因素:服务器的性能、最多容许的并发用户数、安全性等等。作为一名好的架构师,应该认识到当前系统最重要、最核心的质量属性是哪些,例如有些项目的核心是安全性,此时可能需要牺牲性能来提高安全性,这就需要和客户进行交流,做一些平衡,通盘考虑。可能还要专门就安全性来做专门的设计,优秀的架构师会引导客户接受合理的架构方案,以确保系统能够真正投入使用。

· 构造合理的系统模型:好的架构设计一定要有一套完整、合理的模型,包括数据模型(概念数据模型、逻辑数据模型和物理数据模型),结构模型(类图、包图、组件图和部署图等),动态模型(状态图、活动图和顺序图等)等。

· 保证架构的稳定性和可扩展性:软件需求、软件质量属性、UML、设计模式等知识都是必须要具备的。

 

设计模式在架构设计中作用大吗?如何在架构设计中使用设计模式?

通常的做法是要学会分析出系统的扩展点,对于一些可变的扩展点,需要提供一个稳定的抽象层,然后通过具体层来实现具体的业务功能。比如:如果在需求分析和架构设计时发现某个业务功能将来可能会进行改进,例如加密算法,此时可以提供一个抽象的加密类,而将具体的加密类作为其子类,所有的依赖和关联都基于抽象加密类,引入配置文件,将具体加密类类名存储在配置文件中,然后利用反射和注入的方式将具体加密类对象提供给其他业务类使用。当需要更换加密算法时,只需增加一个新的具体加密类并修改配置文件即可,原有设计方案和代码都无须进行修改,系统符合开闭原则,具有良好的可扩展性,这就是策略模式的一个应用。

 

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值