TCLMOVE 架构设计

架构,就是对软件复杂度管理

层次划分

三层结构框架

  • UI Layer
  • Logic Layer
  • Persistence Layer

UI Layer 展现层

UI Layer 采用MVVM框架。

View

V对应View,责任只负责显示,不保存任何状态,保证View的无状态性,states 只能来源于外部,同样的states设置,View 显示显示内容一样。

View最主要的是实现组件化,与其它组件和模块保持最大化的隔离,对内的接口只有states,对外的接口只有events.

比如 基于Rx的方式 :

view.rx.states
view.rx.events.click

View的复杂度在于自身的实现(复杂的绘制/动画),以及Views之间的组合,组件之间的最大化的隔离是防止复杂度的膨胀。

ViewModel

VM对应ViewModel, 负责绑定数据和Views。MVVM的机制是VM实现V和M的数据绑定,双向绑定或单向绑定,由于要实现View的无状态,在此只作单向的数据绑定,数据来源于M,单向流于view的states。

ViewModel对应一个ViewController,此Scene中所有的views状态设置都集中在其中,统一处理,避免代码分散在ViewController各处,造成逻辑混乱;views的enents也是经由此地,产生Actions.

ViewModel会分担大部分ViewController上的逻辑代码,但也只是UI层面的,主要工作是states和events的分发和中间状态的转化,一些简单的限制判断和states的组合/分解,仅此而已。

Model

M对应Model,UI Layer以下对应MVVM的Model.

V和VM负责展现层上的部分,作到无状态化。而所有的状态都在Model之中,状态改变UI呈现改变。

Logic Layer 业务层

Logic Layer会根据业务划分出许多功能模块,业务层应该最先进入详细设计,对比需求分析有效的分离出独立的功能模块。

业务层主要有三个角色:

  • Manager 管理者
  • Worker Protocl 工作协议
  • Worker 工作者

以下我们将以公司组织结构类比的方式介绍业务层和三个角色。

业务层会根据业务需求划分出相应的功能模块,就像公司的各个不同的职能部门,各自有自己的分工与协作。

各部门组织成员都有ManagerWorker,有自己的职责。

Manager 主要职责是 管理Workers, 分发任务, 协调任务, 与上层交互。Manager 不会处理具体的工作,具体工作由Worker来实现。

Worker只关心一个单独的任务,其它的事情不涉及,而且只对他自己的Manager负责。Worker所需要的资源和工具来源于下游。

工作任务由Manager下派,通过工作清单即Worker ProtoclWorker Protocl是工作规范(即接口也叫协议),指明了需要实现的操作。而能够完成这些规范的Workers,不只一个,比如经理(Manager)需要存储一份文档,一个小秘(Worker)说她可以存储在本地,一个码农(Worker)说他可以上传存储到服务器,至于使用那个WorkerManager决定。

部门之间的协作也是由Manager完成,部门经理会向其它部门获取结果。如果一项工作需要几个部门协作完成,可以产生一个更高级的Manager,管理这几个部门的Managers

Persistence Layer 持久层

持久层是对接基础设施,资源的出入口,也可以叫资源层。

其主要包括:

  • HTTP Client
  • 数据库
  • BLE
  • 本地文件
  • 资源文件

HTTP Client

服务器端采用HTTP/RESTful,移动端对应采用API层和Client层。

  • Client层 对应HTTP客户端功能,完成HTTP网络请求功能。
  • API层 对应Rest,完成接口定义,让上层通过接口直接操作资源。

还需要完成本地缓存功能,配合服务端的HTTP缓存机制,和自己的离线缓存。

数据库

数据库实现DAO(数据访问对象),统一数据库的数据操作标准。

数据库采用ORM(对象关系映射)框架,屏蔽SQL的操作步骤。

Change Events,当数据库数据改变时,产生相应的通知事件。

BLE

File Manage

Resource Manage

三层之间的桥梁

三层结构UI LayerLogic LayerPersistence Layer如上所述,各自有各自的职责,彼此之间也是隔离的,这样就可以分配给不同的开发人员,独立的单元测试。而它们之间需求建立沟通的桥梁。

App States

App States的思想来源与Flux架构,实现它的有前端的Redux。【可参考 Redux

App States是一个状态管理器,如上所述UI层是无状态的,而它的状态来源是App States,并且作状态的统一管理。

App States保存了所有的状态,通过View Model绑定View,当状态发生变化时相应的View会发生改变。

这里最大的难度是states。归纳states需要即要全面也要精准,那些值可以是state那些不是请慎重考虑。比如业务数据中的小孩子信息是一定在states中,还有像 正在获取销毁信息的状态 也是一个布尔的state,但像小孩子的数目这种值,已经可以从组织size中知道,就不应该在states,这些值会照成states冗余的,使得管理复杂化。

然后,记住以下几点:

State 是只读的

惟一改变 State 的方法就是触发 action,通过 reducers 改变 states

states的结构尽量扁平化,不要有太多的嵌套。

Repository

Repository采用外观模式。

Repository对接Persistence Layer,提供一组一致的接口,定义一个高层接口,上层不关心数据来源于那里(那个网络服务器或蓝牙或数据库),它只关心它要的数据。

转自组员,原链接
https://jigang-duan.github.io/2017/10/19/TCLMOVE-%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352