瞎聊软件设计

      也作了两三年开发了,随便聊聊本身的感想。数据库

      首先,什么是软件?这个问题每一个人都有本身的理解。软件也叫程序,程序是一个具体化的概念,而软件是一个抽象的概念。程序最先被发明出来,是用来破译密码的,只能作简单而重复的计算。而今天的软件就不只仅是用于作简单重复的计算了,它被用来处理变幻无穷的业务。那么只能作简单重复运算的程序,要怎么去处理突飞猛进的业务呢?有一个办法就是对业务进行抽象。session

      咱们的业务再怎么变幻无穷,总有一些不变的规律。就比如咱们所处的世界,它应该是咱们所能接触的最复杂的事物,可是咱们的祖先仍是总结出了其中不变的规律,叫作 道。一阴一阳之谓道。这个规律总结的好,由于它成功指引了咱们几千年的医学、哲学的发展,在能够预见的将来还将继续影响咱们的生活。因此说,咱们的业务再怎么变化,其中总有些东西是不变的,若是咱们的软件设计能很好地把握住这些不变的东西,那么咱们的软件就能够应对任何的变化。固然这是最理想的状况。数据库设计

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

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

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

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

      那么什么样的数据算是规则的数据呢?我想这个写程序的人都有本身的理解,并且程序写的好的人,对这个的理解也是大同小异。不过我仍是要说几点通常规律(WEB项目数据都在数据库,因此我以数据库的数据为例来讲明)。io

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

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

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

      以上是我在实际工做中遇到过的问题,而后对这些问题所做的思考。也许对多数人来讲,这是理所固然的事情,但我确实遇到过好多莫名其妙的业务设计,最后都是本身挖坑本身填,这些不变的道理仍是不少人没有认识到。

相关文章
相关标签/搜索