瞎聊软件设计

      也做了两三年开发了,随便聊聊自己的感想。

      首先,什么是软件?这个问题每个人都有自己的理解。软件也叫程序,程序是一个具体化的概念,而软件是一个抽象的概念。程序最早被发明出来,是用来破译密码的,只能做简单而重复的计算。而今天的软件就不仅仅是用于做简单重复的计算了,它被用来处理千变万化的业务。那么只能做简单重复运算的程序,要怎么去处理日新月异的业务呢?有一个办法就是对业务进行抽象。

      我们的业务再怎么千变万化,总有一些不变的规律。就好比我们所处的世界,它应该是我们所能接触的最复杂的事物,但是我们的祖先还是总结出了其中不变的规律,叫做 道。一阴一阳之谓道。这个规律总结的好,因为它成功指引了我们几千年的医学、哲学的发展,在可以预见的未来还将继续影响我们的生活。所以说,我们的业务再怎么变化,其中总有些东西是不变的,如果我们的软件设计能很好地把握住这些不变的东西,那么我们的软件就可以应对任何的变化。当然这是最理想的情况。

      要从一个复杂的业务逻辑中抽取出尽可能不变的逻辑是很困难的,它往往需要经历无数次的尝试,就像道的总结,是由我们无数的祖先经历长时间的尝试才提炼出来的,所以这一点毋庸置疑。但是要做到从变化的事物中提取出不变,或者变化尽可能小的业务逻辑,则总还是有一些规律可循的。其中一个很重要的原则便是高内聚,低耦合,不过我这里并不打算探讨这个问题,我只想聊一些更浅显的内容。

      以开发常见的WEB应用为例,一个有多个使用者参与,并且需要身份认证的系统,首先有两个模块是一定要有的,就是session管理和权限的管理。设计一个这样的系统,这两个模块是首先应该被考虑的,即时项目初期没有精力做,也应该预留接口,这便是业务变化当中不变的部分。

      应对变化的部分,我们应该有一个原则,就是要把不规则的数据想办法转换为规则的数据进行处理,那么这里就有两个方向的思路应该探索:① 在实现用户最终目标的前提下,我们是否可以通过让用户在使用思路上做一些细小的调整,来让我们的数据变得更规则;② 我们是否可以通过提取更好的业务模型,来使数据变得更规则。处理规则的数据有一个显而易见的好处,业务逻辑简单,明了,写出的代码不容易出现错误。

      我写程序最讨厌if语句,我通常会想各种方法来避免if的使用。因为使用if意味着你在处理特例,也就意味着你没有抽取出适当的业务模型,也就意味着你的代码还有优化的空间。

      那么什么样的数据算是规则的数据呢?我想这个写程序的人都有自己的理解,而且程序写的好的人,对这个的理解也是大同小异。不过我还是要说几点一般规律(WEB项目数据都在数据库,所以我以数据库的数据为例来说明)。

      (1)看数据的数目。一个事物在数据库有且只有一条主数据。例如我提出一个申请,这个申请里面可能同时申请了多个内容,那么我们就应该是首先有一个记录申请信息的主表,这个表对应着一条申请记录;然后有一个辅表,记录我申请的多个内容的详细信息。那种只用一张表把申请信息全存起来,然后通过去重的方式获取申请列表,是非常糟糕的做法。

      (2)看数据关系。数据之间的关系要明确,一对一的关系尽量在主表中放外键,一对多的关系则在辅表中放外键。数据尽可能以树状组织。数据的组织遵守高内聚,低耦合原则。

      (3)数据表的设计要直截了当,直观明了,需要什么结构的数据就存储什么结构的数据。例如我们通过一个流程产生了一个资产,那么我们就在数据库设计一个资产表,存放一条资产数据,这样在我需要查看资产信息的时候也就很方便了,不用说需要资产信息时还到流程里面去找。

      以上是我在实际工作中遇到过的问题,然后对这些问题所作的思考。也许对多数人来说,这是理所当然的事情,但我确实遇到过好多莫名其妙的业务设计,最后都是自己挖坑自己填,这些不变的道理还是很多人没有认识到。

转载于:https://my.oschina.net/u/3084123/blog/1564082

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值