前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何设计一个糅合系统

如何设计一个糅合系统

原创
作者头像
brzhang
发布2021-10-17 21:37:39
4690
发布2021-10-17 21:37:39
举报
背景

首先,关于这篇文章为何取名为设计一个糅合系统的设计,所谓的糅合系统,是指这个系统的用户群体没有那么纯粹,比如,是一个既有c端用户,又有b端用户的使用场景的系统,起初在设计这样一个系统之初,我思考过这样的一个系统会有几个问题:

  • 逻辑混杂,到时候会出现这个c端是这个样子的,b端为了兼容而妥协,折中出来的并不是一个好的方案,对两类用户来说都不够简洁
  • if/else糅合的代码可理解性比较差,随着迭代的推进,后续会越来越来维护。
  • b端更加注重功能体验,他们要的是功能能不能满足他日常运营,而且不同类的b其功能是不同的,用户端更加注重操作体验体验是否好,当然b端也注重操作体验,但相对没c端这么匠心。
  • 不同的b端可能需要的主体风格不同,是考虑一个b一套代码,还是一套代码配置不同的b,还是一套b的框架下组合不同的工具。
  • 分离/b-part/c-part之后,如何复用公共逻辑,减少重复开发工作,公共逻辑包括哪些,下层的规则是什么,该放在何处。
  • 假如让一个新手加入进来,他怎么快速找到相应的业务的代码逻辑在何处,如何新增,修改代码已实现需求。

基于以上这些点的思考,我首先走出了一个设计的雏形。

孵化

首先,我们先站在上帝视角来看一看,一个用户是如何和我们的系统打交道的。第一个我们关心的是一个三要素:

是谁?来干什么?干什么后去哪里?我们可以用一个故事的方式来描述几个这样的案例。

  1. 我是巴乐兔的合同管理员,我来这里给张三发起一份合同,完事之后我要回公司报备下。
  2. 我是李子柒,朋友说这个挺好用的我就来了,我也不知道干什么,我更不知道我要去哪。
  3. 我是黎明,是一个学生,我来签一份摩尔公司发给我的暑期实习劳务合同,完事之后我就没事啦。
  4. 我是韩梅梅,是旺旺兴趣培训班的店员,我来签一份佳佳食品发给我们培训班的采购服务合同。
  5. ….

以上的场景,我们均可以从里面抛出【是谁,干啥,去哪】,这其实就是我要说的意图2.0,。

故事2是一个特例,实际上,不知道什么干什么也是一种干什么,不知道去哪也是一种去哪,不知道是谁也是一种是谁。

是谁

就是要确定进入系统的用户身份,是b端的用户,还是c端的用户,一旦确定了身份,这个应该是全局可知

  • isC
  • isB
干啥

就是要确定是谁之后的事了,就像大家去政府办事一样,人家首先明确你是谁,然后在问你来干啥,你干啥是不是得交出一些办事的凭据来,事情的id,通过这个事情的id就对应到了不同的功能

去哪

首先每个功能有其内部的流转流程,它自己知道哪一步该去哪?但是:

  • 他这个内部的流程结束了呢?
  • 遇到异常了呢?

那么他下一步将走到哪里呢?这个是这个故事里的人的是,应该把选择的权利交给他。

实施
如何确定用户身份

要确定用户身份,我设计需要一个用户管理模块,它具备的能力有:

  • 切换身份,满足一部分用户既是b端用户也是c端用户的场景。
  • 申请身份
  • 登录角色

最终是为了确定用户身份。

如何确定用户来干什么

我们去银行我们会带上银行卡,我们去买菜会带上菜篮子,我们去做火车会带着车票,我们去考试会带上准考证….我们都会遵守一些既定的事情的协议。

  • xx:bank
  • xx:buy
  • xx:train
  • xx:exam

我们去买什么东西会写一个清单,如是:

  • xx:buy&item1=”南瓜1斤”&item2=”瓜子1公斤”

所以,用户来干什么,都是一系列的动作,做这些动作需要一个清单才知道具体怎么做,交给谁做很容易,我们就想到了路由

路由器就是一个配置表,表述的事情是,xx:buy&item1=”南瓜”&item2=”瓜子1公斤”

功能

参数

realPath

xx:c-buy

c端买东西

item1=”南瓜1斤”&item2=”瓜子1公斤”

pages/c-buy/index

xx:b-buy

b端买东西

item3=”南瓜1斤”&item4=”瓜子1公斤”

pages/b-buy/index

功能是什么?

功能需要是一个比较内聚的概念,他可以包含一系列的动作,有自己内部的流转流程,更具数据的状态及用户的操作来驱动页面UI 的展示,即:

功能= 数据 + action + UI

功能,他有依赖底层的一些服务,及一些公共的工具函数。

那么,基础服务包括哪些呢?

  • 网络服务
  • 邮件服务
  • 短信服务
  • 甚至是三方服务,如人脸核身
整体的三层架构

经过上面的分析,我们不能达成一个从上倒下依赖的三层架构模式:

  • 路由层
  • 功能层
  • 基础层

路由层的作用是找到三要素【是谁,干啥,完事之后去哪】

拦截器是干啥的,上面已经提到,是找出三要素,找到之后如果发现非法入侵,就会把他路由到非法页。

功能层是解决干啥的。

功能才的Action是干啥的,是处理用户的的各种动作的,包含:

  • 网络请求
  • 本地请求

这样的一些操作都的会引起数据变化,进而导致UI发生改变。UI的实现可以原生,可以web,

基础层是帮助功能层很好的完成干啥的。

还缺点啥?

一个好的系统肯定是需要可观测性的,需要trace用户的行为,包含

  • 进入哪个页面
  • 做了哪些动作
  • 动作的前因,后果是啥

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 孵化
    • 是谁
      • 干啥
        • 去哪
        • 实施
          • 如何确定用户身份
            • 如何确定用户来干什么
              • 功能是什么?
                • 整体的三层架构
                • 还缺点啥?
                相关产品与服务
                短信
                腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档