一对一免费咨询: 13913005726 025-66045668

  本篇主要唠唠建模知识在日常工作、实际设计中的应用。

  

  以下为上篇总结,补充在此;

  角色矩阵、系统主流程以及状态图,三者之间相互补充与制衡,最终达到完美的统一;

  状态图梳理后调整补充系统主流程,系统主流程调整后调整补充角色矩阵;

  同样,角色矩阵也限制、指导着系统的主要功能,防止在梳理需求时被无限放大;

  相关阅读:

  建模知识在需求分析、梳理中的应用(中)

  数据库建模知识:在需求获取与分析中的应用(上)

  一、原型线框图

  在角色矩阵、系统主流程和状态图达到统一后,接下来就来到原型设计的阶段,此阶段的主要目的是把每个实体的属性以及实体之间的联系,以我们日常可见、理解的方式呈现;

  1.1 模块划分

  基础模块的划分遵循实体的界限,一般来说,一个实体就是一个基础模块,通常模块首页以列表形式展示;如普通的电商后台系统,即用户、商品、订单这些基础模块,这些其实也是实体;

  统计,关联类,根据实际需求定义模块,通常以图表、列表形式展示;

  1.2 站点地图

  系统涉及到的页面以及页面之间的流转以地图索引的方式展示;一般以模块划分,如系统功能较简单,可以系统为单位。

  1.3 页面信息架构

  即页面呈现的信息,从建模角度来看,其实就是实体属性以及实体之间联系的展示;

  实体属性,即实体的基本属性,比如员工有员工号、姓名、身份证号、职位、性别、邮箱等基本属性;实体之间的联系,即该实体与其他实体之前的联系,如我们在上篇中写到的部门-人员的关系;

  1:1,当实体之间为1:1的联系时,当前实体的页面展示可以将对面实体以其属性的形式展示;如某公司业务支撑部,经理张三,在员工基本信息页,职位:部门经理,部门:业务支撑部;在部门基本信息查看时,部门:业务支撑部,部门经理:张三;

  1:N,当实体之间为1:N的联系时,为1的实体页面信息展示时,可以将对面的N以下级页面或列表的形式展示;为N的实体页面信息展示时,可以将对面的1以其属性的形式展示;如业务支撑部下属员工有2个,分别是小丽、小黄,查看业务部信息时,可以设置下属员工链接到下级页面,也可以以列表的形式展示这2个员工信息。同理,在员工基本信息页面时,可以将该员工的所在/所属部门以其基本属性展示;

  N:N,当实体之间为N:N的联系时,对面实体以下级页面或列表的形式展示;如学生-课程,在学生模块,可以将所选课程以下级页面的形式展示,也可以以列表的形式展示;同理在课程模块,该课程被哪些学生选修,可以以下级页面展示,也可以以列表的形式展示;

  二、设计原则

  2.1 始终把用户+需求放在第一位

  用户:即该系统的最终用户,可遵循我们在上两篇中讲到的角色实体;

  需求:即功能,用户通过系统想要达到的目的;

  用户+需求:即考虑该功能的实际应用场景,根据实际场景把控设计的方向;

  实际场景应考虑的因素如下,持续补充:

  用户年龄大小,这直接影响到视觉上的配色、字体、字号等;

  用户整体素质水平,在流程跳转、提示等节点尽量简洁易懂;

  用户所处环境,用户是处在比较庄严的机关单位还是新潮的互联网行业,都有一套行业规则;

  功能使用周期、频率;这直接影响到表结构的设计,在大频率的功能上,访问速度是需要着重考虑的问题;

  2.2 遵循高内聚,低耦合的设计原则

  这应该是我从大学,老师就一直强调的,就像一项指明灯指引我们前进;你会发现,所有不好用的设计逻辑,都会忽略这个原则。

  官方解释:

  高内聚:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

  低耦合:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。

  官方给出的解释中,主要是针对模块之间,实际上,这个结论对大至平台,小至实体都是适应;

  下面举个关于实体之间的栗子:我之前接过的一个项目,其中有一条这样的逻辑一个经销商下最多3个联系人;这时我们会疑问,为啥会有这种设定, 这样的规则在后续会产生哪些问题呢:

  当经销商下联系人超过3个时,系统是不支持的;

  系统是由简到繁的过程,一开始设定这样的限制,如果后面想在撤销这种设定的话会涉及很多改动;

  实体之间不够独立且依赖太多,所以这不遵循高内聚低耦合的原则; 其实这就是简单的1:N的关系,只是在某些特定方式下,如导入经销商及其联系人的时候,这时我们可以设定这个联系人最多是3个,但是,在系统的使用中,这种关系反而是一种负担;

  2.3 遵循复用性原则,所有设计力求复用最优化

  官方解释:

  可复用性,复用又叫重用,是重复使用的意思。复用的好处可以得到 较高的生产效率以及随之而来的成本降低、较高的软件质量(错误可以更快的被纠正)以及 恰当的使用复用可以改善系统的可维护性。

  模块之间的复用,即实体的复用,当实体之间是N:N的关系时,一定会存在这样的复用关系;如果不存在,那这个设计可能没有达到复用最优化的标准;

  如我们常见的组件与商品的关系,是N:N,在商品新建时会以属性的方式增加组件;

  这样做的好处是:

  组件不需要重复新建,直接在商品新增时引用加入即可;

  可对组件进行管理、控制;

  如果我们换一种设计思维,如新建商品时,一个个编辑填写组件信息,这样做会带来

  如不同商品的组件信息相同时,要重复录入;

  组件是以属性的方式附属在商品上,达不到组件可控可管的需求;

  阶梯性关联关系的设计,即多个实体之间有阶梯性关联关系,建议采用断层式数据结构设计,不建议跨级发生联系,即使需要跨级也要把中间那层关系加上;

  为了便于理解,以下实例奉上。

  背景:项目-经销商是N:N的关系,经销商-联系人是1:N的关系;

  需求1:当项目新增成功后,会根据一定条件匹配经销商,确认此项目可能推送的经销商,或者叫预推送;此时的预推送表结构的设计应该是项目-经销商,而不是项目-联系人或项目-经销商-联系人;这样设计的好处有,

  我们只固定了前半边的关系,后面的关系可以通过经销商来匹配带出,当经销商人员发生变更时也不会有任何影响;如果采用其他方式,在经销商人员变更时会多出很多复杂的数据操作,以保证此功能不受影响;

  经销商-联系人是1:N的关系,插入一条项目-经销商关系就要插入多条项目-联系人或项目-经销商-联系人的关系,从数据的冗余角度考虑,也是项目-经销商的关系比较适合;

  需求2:项目推送,项目预推送匹配成功后,可以对项目进行推送,这是真正的推送,有了这条推送,联系人才能在前端看到对应的项目;而此时的设计应该是如何呢

  答案是,项目-经销商-联系人;为什么会加入经销商呢?前面的背景也说到,项目与联系人其实是没有这种关系的,他们产生关系的载体其实就是经销商;这样做的好处是

  明确该联系人时通过什么载体(即经销商)来获得这从推送关系的,当联系人与载体的关系发生变更时,有个依据来对关联数据进行相关操作;如联系人从载体A变更到B,那此时,联系人当时通过A获得的项目推送关系就应该删除;

  相反的,如果不加入经销商的载体,那联系人可见的项目是只增不减,因为我们没有这个载体的依据去操作数据;

  注:一切实际需求为标准,仅供参考;

  三、日常设计要点

  3.1 保持对需求的严谨态度

  虽然需求多如牛毛,产品累成狗(微笑),但我们也要始终保持一颗严谨、谦逊的态度;做软件的都知道,即使是一个很小的需求,他的改动有时也不一定比一个大的需求少;所以,在需求被提出时,我们要保证我们已经了解到该需求的所有细节,以及涉及到的所有改动点;

  3.2 尽量囊括所有扩展场景

  好的产品,流程极简且不容易发生异常;为什么说不容易呢,因为即使是神,也有考虑不周的地方,所以在设计时,应尽量囊括所有场景。

  (1)外部条件导致的异常如断网、服务挂掉等,应给出合适的提示信息;

  (2)另外还有一种,即在常规流程外的分支流程,这个是特别需要我们注意且控制的。

  重复提交:提交按钮没有控制可用状态&&页面流程较慢的情况下会出现多次重复提交的现象,一般前端+后台,双重控制,杜绝重读提交;

  流程异常,无法继续走下去:充分考虑扩展场景,避免出现操作异常,即使异常,也应给出相关提示,指导用户继续走下去。

  3.3 模块关联性,版本规划

  模块、需求,都有可能产生关联,有前后的这种关系,这种情况应该考虑先规划前置位的模块或功能,然后再是后置位;版本的规划,以系统核心模块为基础,遵从关联性模块中的前置模块,优先级高于后置模块的规则,来规划版本;

  3.4 其他

  (1)唯一性校验,当实体有唯一性要求时,如用户的手机号码,身份证号等,在实体新增、修改时,校验是否已存在、保证唯一性;

  (2)关联性关系,当删除父节点时,子节点也会对应删除或软删除;

  (3)在对实体进行变更时,应首先以用户的角色看问题;如已经发出去的优惠券,此时应设置不可再进行变更,因为发生变更后,用户看到的将是更改后的优惠券;

*请认真填写需求信息,我们会在24小时内与您取得联系。
致力于为客户创造更多价值
13913005726 025-66045668