对MVVM的另类使用

本贴最后更新于 3302 天前,其中的信息可能已经时移俗易

  我的理解:MVC VS MVVM。网上对MVC和MVVM的介绍也已经非常多了。我觉得MVVM其实也是MVC的一种。只不过MVVM的职能划分更为细致了而已。网上比较盛行的是响应式编程。这个的争论是仁者见仁,智者见智了。现在就不做这个的讨论。

  今天想要介绍的是如何在不使用RAC来实现这个MVVM,现在已经用于工程中,并且工程的耦合度大大的下降。

  我的解决方案大部分来源于猿题库的工程师的一篇博客。我现在无法找到那篇博客地址所在,以后找到会附上链接。这里表示对原作者的感谢。由于原文种并没有给出具体的实现,于是我加了一部分自己的补充,已经将具体的实现通过自己的方式完成。

 这里先附上我的各个模块的关系图

转载本博客的时候请附上原文链接:http://www.junwen1992.com//articles/2016/04/25/1461571806713.html

1.viewController:所有的东西都是有viewController中来进行管理的。但是viewController只是用来定义view viewModel等对象----负责转载,以及响应view中的事件。

2.view:view是一个视图。

(1)这里面制作ui相关的操作。如:验证码按钮,验证码按钮点击后会发生ui上的变化。获取验证码------>倒计时 ,这部分应该放在view中进行完成。而获取验证码,发送网络请求,这部分应该由viewController来响应。    

(2)在rac中,如果viewmodel中的数据,发生了改变。则view中显示的数据是会改变的。而我们没有使用信号量的机制,所以这里需要自己替代。 如:更新view的操作,在view中应该要实现一个方法,updateButtonValue:(nsstring *)str 类似的方法,供viewModel更新新完数据后进行调用。

3.viewModel 这个是跟view息息相关的。

(1)他负责将网络请求回来的数据源,或者model数据源转换为view需要的数据。

(2)遇到需要请求网络的时候,会回调这个类的方法网络请求成功方法 -----> 将model转换为view所需的数据 ------>调用view事先写好的updateView的方法(这里viewModel需要对view一个weak引用)。

4.serviceModel 这个是用来处理业务逻辑的。

5.dataControl 这个类负责发起网络请求,然后将网络请求封装成model数据,并且回传给viewModel。 

6.model实体类,不多说了。

总结上面的模式:这样你的viewController就会非常的精简,view中的代码只是视图,不做任何的操作,由于实现了分离,更有利于做测试。

 

 

另外,在整体的使用中,会抽象出多的基类,工具类等。。。根据不同的特点活用category和继承,特别是category,非常推荐。有了他可以让你的代码非常的简洁。

另推荐一种声明对象并实例化的写法

 YBMWorkOrderTableView *tableview = ({
        YBMWorkOrderTableView *tableview = [[YBMWorkOrderTableView alloc] init];
        tableview.delegate = self;
        [tableview setBounces:NO];
        tableview;
    });
我觉得这样的写法非常优美,它将所有定义该属性的设置都放在了一起。代码可读性大大的加强了
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖
  • MVVM
    2 引用
  • View
    11 引用 • 2 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • OpenCV
    15 引用 • 36 回帖 • 8 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 614 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    170 引用 • 1529 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 279 关注
  • 叶归
    7 引用 • 31 回帖 • 17 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    495 引用 • 931 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 1 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9733 引用 • 44280 回帖 • 89 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 4 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 193 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 628 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 30 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 22 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 143 回帖 • 2 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 1 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 451 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 529 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    168 引用 • 597 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 546 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3200 引用 • 8216 回帖 • 1 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 47 关注