架构的组成部分

 

说明: 前端

这篇随笔,是我在阅读《代码大全》这本书的【前期准备】这一章节的时候,所做的笔记。java

由于翻译著做一般比较冗长,所以我将这一部分简单概括了一下。程序员

其中,我略去了在如今的软件开发中通常不会遇到的问题,斜体部分是我结合我的工做经历的一些理解(我主要从事的是java-web系统开发)。web

原文见于《代码大全》P45。算法

 

在进行架构设计以前,咱们首先应该明白架构应当由哪些部分组成,这样在每一次自行设计架构,或运用别人设计好的架构的时候,都可以迅速地找到最重要的组成部分。数据库

一、程序组织。后端

  •  以归纳的形式对整个系统做一个综述,描述组织结构。
  •  系统由哪些构造块(子系统)组成。好比用户界面、命令解释、封装业务规则、访问数据。在Java web中,他们分别为前端、MVC框架、服务器接口,以及mybatis或jdbc等数据库操做工具。
  •  应该明确每个构造块的责任和负责的区域,不一样的构造块之间应该尽可能独立。好比咱们常见的先后端分离式开发,controller、service、dao三层设计(若是用jsp等技术作界面展现,则为四层)等。
  •  应该明确不一样构造块之间的通讯规则,对于每一个构造块,架构应该指出它能使用哪些构造块,或者不能使用哪些构造块。好比规定controller和service层传参必须使用POJO类,controller能使用service层,但不容许直接调用dao层等。

二、数据设计缓存

  •   数据库设计时采用何种规范?为什么如此设计?好比是使用自增 id仍是由代码生成 id等。
  • 数据一般只应由一个或一组类来访问。

三、业务规则安全

  •   架构是否依赖特定的规则,以及架构须要做哪些特别设计来适应这种规则?好比同步问题

四、安全性服务器

  • 应该描述实现设计层面和代码层面的安全性的方法。好比如何处理缓存,如何处理非受信数据,如何加密等等。

五、性能

  • 应该详细定义性能指标。
  • 应该详细定义不一样性能之间的优先顺序。(如响应速度、内存、并发数等等)
  • 详细描述:
    •   在当前设计下,为何能达到性能要求?
    • 系统所能承受的最大负荷?
    • 当业务量增大时,哪些部分可能会最早达不到性能指标,风险最大?
    • 为了知足性能指标,须要在哪些地方进行特殊的算法/结构设计,对开发成本和周期有何影响?

六、可伸缩性

  •   架构应该描述系统如何应对诸如用户数量增加、访问量增加、数据库记录数增加等业务不断增加的状况。
  • 若是预计业务不会增加(或增加不会超出预期),则架构应当明确地列出这一假设,好比一些公司内部使用的erp软件、财务系统等。

七、国际化/本地化

  •   将一些提示信息、帮助信息、错误信息等等集中管理,而不是分散在代码各处,以便在不一样的语言环境中可以轻易替换。
  • 尽可能作到让不懂技术的人也能去维护这些字符串
  • 决定是在配置文件中配置这些信息,仍是能够经过数据库动态修改?为何?
  • 总之,要尽可能作到在不修改源代码,或者不重启服务器(假若有的话)的状况下,就能作到所有替换。

八、输入/输出    Input/Output

  •   定义读取和写入策略
  • 应该描述在那一层检测I/O错误:在字段、记录、流、或者文件的层次。

九、错误处理

  •   在什么层次上处理错误?是否规定某一个层次无权处理异常,必须所有将其抛出?
  • 指出在进行数据验证的时候,是每一个类都须要进行数据验证,仍是规定只须要某一个层次或某一些类须要进行验证,而且另外的类则能够直接假设数据是被验证过的、值得彻底相信的。
  • 是使用环境內建的异常机制,仍是本身创建一整套新的机制?好比在java中,自定义一些继承自Exception类的异常类。

十、容错性

  • 在遇到错误的时候,是否能迅速从错误中恢复(好比关机、重启),并清除其不利影响?

十一、可行性

  •   架构师多半会关注系统的各类能力,例如是否达到性能目标,可以在有限的资源下运转,实现环境(运行环境)是否有足够的支持。
  • 架构应该论证系统的技术可行性。若是在任何一个方面不可行都会致使项目没法实施,那么架构应该说明这些问题是如何考虑的。

十二、过分工程

  •   过分工程师指程序员为了使系统拥有超过需求中定义的能力而进行的额外工做。
  •   “健壮性”是指“系统在发生错误以后继续运行”的能力。
  • 架构描述的系统应该比需求描述的系统更健壮。
  • 组成系统的各部分不该该只在最低限度上知足健壮性要求。
  • 应该将精力均匀地花费在系统各部分的“过分工程”上面,不该该由于我的好恶,出现“某些部分异常健壮,某些部分勉强健壮”。

1三、不要重复造轮子

  • 关注行业里已有的各类组件、技术,看是否能够知足本身的需求;
  • 本身须要的组件、技术是否开源?若是不开源,成本多少?
  • 本身从新开发,和直接购买相比,哪个更有优点?
相关文章
相关标签/搜索