论软件工程

昨天一位同学问我对软件工程的体会?当时愣住了一下,不知道该怎么回答,感觉话到嘴边却不知道怎么表达,因为这个话题比较沉重,不知道该怎么用简短的语言来进行描述,要说可能一天都说不完,可能是自己的表达能力有限,语文没学好(高考语文不到80分),当时只是给出了:“这叫我怎么回答”这样的答案。随后在我的脑海里一直回忆自己开发经历,想从中找到一些信息。第一次听到软件工程是大三的时候有一门课程叫做软件工程,我依稀记得里面几个关键词语:髙内聚.低耦合、可扩展性、可行性、可维护性,同时还包括一些软件开发过程。下面将结合这几点以及我的经历来谈谈我眼中的软件工程,同时也对自己进行一次总结。

髙内聚.低耦合

这个词是自从我上过软件工程的课之后一直没忘记过,并且一直影响这我着设计开发过程。什么叫高内聚?一句话就可以概要:物以类聚,人以群分。什么意思?就是将相同属性的事物抽离出来,从而简化对这一类事物的控制,以方便管理。那什么叫低耦合?上面说了将相同属性的事物抽离出来以达到分组,那么低耦合就是降低各个分组之间的关系,这样可以达到结构清晰,管理灵活。上面都是解释字面上的意思,完全没有扯到一点关于软件方面的东西,那么这两个词放在软件设计里面是怎么体现的呢?

这个可以分为宏观和微观,宏观上面,一句话:模块化,层次化。模块化和层次化是髙内聚和低耦合在软件设计宏观上面的体现,具体的又可分为纵向业务划分,和横向架构划分(这也称为二维架构,之前还听过蔡学镛老师说的四维架构,这个就更加的抽象了)。将相同业务抽离到一个模块里面,将整个业务线切分成多个层次,上层只能依赖下层,下层不能依赖上层的图结构。从而使得整个软件在结构上层次分明,业务线清晰。这里举个例子:比如我现在要做一个电商网站,首先要做的第一件事情不是探讨技术上面是否有难点,而是探讨整个网站业务方向,从而确定整个业务模型,对里面进行建模,分析里面包含的哪些领域模型。先不谈复杂的电商,就说一个初期的CC网站,首先它的业务方向是一个个人买家交易平台,一个用户即可以扮演买家也可以扮演卖家,确定这个之后,我们再对里面进行建模,从而可以进行模块划分。上面的网站可以简单划分为商品模块,订单模块,用户模块等等,那么这个模块就是在软件架构里面的髙内聚,那么低耦合怎么体现呢?模块划分之后需要确定模块在整个系统里面的定位,从而可以确定它们之间的依赖关系,以达到确定它们所处的层级。下面通过一个图来描述上面三个模块的层次关系:

用户模块依赖订单和商品模块,订单模块依赖商品模块,那么可以确定的是商品模块是在整个系统正处于底层模块,而用户属于上层模块,那么订单模块不能反向去依赖用户模块,商品模块也不能反向依赖订单和用户模块,这就是在架构设计上的分层,这样做的好处就是系统的结构清晰,而且对功能的分层降级可以简化业务的复杂度,并且可以达到对局部的优化不会对其他模块的影响,只要当前对外暴露的接口定义不变。那么这样分层之后,各个模块之间通过什么来关联呢?通过底层模块向上次模块之间暴露它内部的接口,比如商品暴露查询商品的接口,那么用户就可以查询用户所上架的商品,订单包含哪些商品,以及订单暴露它的接口给外部,那么用户就可以查询某个用户所拥有的订单。至于模块之间通过什么方式通信?如果是项目前期这些模块都放在一个工程里面,这个就可以直接引用各个模块的接口实现,如果项目发展到最后,需要将各个模块独立出来,单独部署,那么就需要一个远程通信的方案,这里面有很多成熟的方案,比如比较通用的Webservice,性能比较高的RPC(这一块有很多工具,比如最近听到的跨语言的ICE(Internet







































北京白癜风医院哪最好
北京哪家医院看白癜风好



转载请注明地址:http://www.henanledxianshiping.com/fjgcjs/6963.html
  • 上一篇文章:
  • 下一篇文章: