关于设计模式

一个APP一定是这样的构成的:

Data + State + Business The brain of app is Model.

the represention of Model is view.

the controller is glue that ties app together.

简单来说view收到用户触发的事件,然后controller决定于Model交流,决定调用那些Model。

view 即是视觉的呈现,视图这东西,一个个的静态页面,不要想的过于复杂。比如你要做个围棋的APP,棋盘会有什么?

棋盒、棋子、棋盘。也就是三个部分。

棋盒里面有棋子,有固定数量棋子,是黑棋还是白棋。于是我们用面向对象的思想写一个棋盘类,里面有棋子数量以及棋子类型。

棋子 的属性有什吗?棋子类型(黑白)

棋盘 棋盘有长宽、棋盘上不定数目的棋子。

这还不够,单单有这些还不够,我们想一下,对于围棋APP的用处是什么?当然是下棋,这是动态变化的过程。也是下棋的业务逻辑所在

和真人下棋的时候,你会去屋里拿个棋盘吧。在软件中我们该怎么做?绘制棋盘对不?或者叫棋盘初始化。然后你下完一盘之后,你会怎么

做?把棋子重新分到相应的棋盒里。在软件中叫重置,或者叫初始化。现在有两个基本逻辑。

1、绘制棋盘

2、分出胜负之后,重置棋盘,还是绘制。

下棋的过程中,你一手我一手,你从棋盒拿出一枚白色棋子,放到棋盘的某一个位置。在软件中就是,棋盘类为白棋增加一个计数。

然后呢?下子之后,你发现你把一圈黑棋给围住了。于是你提子。在软件当中呢?棋盘类为黑棋减少一定数量的计数。

于是有了一个减少和增加棋子的业务逻辑。

最后下完了,判断当前存活的棋子数量。看看谁赢了。

所以说,为甚吗 一个Model是由Data、State、Business 三个组成的。数据是死的,棋盒,棋盘,棋子。这些都是数据模型 只有数据。

就相当于你把棋子、棋盘、棋盒放到了箱子里。有什么用?你买了本书不看有什么用,给别人看吗?

controller 是胶水,紧紧的把view 和 model 联系在一起。怎么个联系法。翻译成中文控制器、开关等。就可以理解

对于view的各种事件,最长的就是点击事件,这个事件交给controller,它决定这个事件,该交给哪些Model处理。一个APP不会只有业务逻辑

在软件中,这种交流的方式基本上就是,设置回调

MVC 模式的Model和view 分开,所以单纯的一个Model很容易测试,比如测试添加一枚棋子,棋盒中棋子数目与棋盘上数目变化是否符合。

但是控制器,一般都会被写在Activity里面,所以你会看到一大段的if else 嵌套、switch等语句。这样单元测试就会很困难。你一旦换一个

view 控件,controller必须要改变。因为各种各样的条件语句充斥着,所以维护起来很困难。

MVP 模式的Model还是那个Model,在MVP中Activity、Fragment将作为View的一部分。presenter 还是一个控制器,但是不要Android相关的API或者对象出现。



posted @ 2017-06-12 14:54  计划了好了再娶吧  阅读(124)  评论(0编辑  收藏  举报