# 系统架构设计实践

一个开放平台的设计大概思路。

## 第一步：定位用户

开发者，分企业开发者和个人开发者。

## 第二步：系统功能设计

心中先有个梗概，列出列表。

最核心的功能模块：

1. 提供开放接口
2. 提供开放文档
  1. 提供API文档
  2. 提供SDK
    1. SDK下载，来源各个组，如嵌入式、移动开发、服务器端，提供各种语言的SDK版本
    2. 除了SDK下载还需要提供SDK使用说明，整合进文档中

其他功能模块：

1. 用户中心
  1. 开发者认证
2. 产品管理

---

然后可以搭配脑图、流程图、时序图、用例图等建模工具，设计核心业务模块的流程。

### 示例

思维导图（脑图）：

![Image](/_static/design/mind.png)

系统结构图：

![Image](/_static/design/system.png)


用例图：

![Image](/_static/design/use-case.png)

时序图：

![Image](/_static/design/seq.png)

流程图：

![Image](/_static/design/flow.png)

## 第三步：设计数据库表结构

建库建表非常关键。主要原则为，减少冗余数据、避免表字段过多、提高查询性能。

最好是以数字id为主键，避免使用自增id（影响数据同步），外键关系不用外键，关键字段设置索引。

首先第一张表，应该是用户表，虽然不是核心业务，但所有核心业务都与用户相关联，也需要注册登录才能进行。

所以先设计用户表。用户表应该至少两张表，一张是用户基本信息表，只存用户名、密码等或最常用字段，如登录信息；另一张是认证信息，当然也可以分别为企业开发者用户、个人开发者用户建两张表，因为不同的认证方式需要的字段也是不同的。通过用户id字段将用户其他信息表数据进行关联。

示例：

![ER图](/_static/design/er.png)

上图为ER图的一个示例，Windows下有 PowerDesigner、Visio等工具，Mac下用MySQLWorkbench。

（可以参考已有系统的用户体系设计，但开发者平台与用户产品系统存在一些细节差异。）

另外，前期也可以考虑加入一些日志表，如认证记录表，存一些历史的认证信息。根据项目时间预算，如果前期不考虑，后期也需要考虑加上。

## 第四步：搭建系统框架

先搭建一个大框架，配置缓存数据库，加入通用类，配置端口，并且能够运行。

（可以参考现有的项目以及项目章节的结构）

搭建测试框架（如果项目进度预算允许）。在项目实现过程中的细节，关注下一章节的内容中讲解。

## 第五步：迭代

重复上面的过程，完善新功能模块设计，加入到已有系统。
