当 Controller 膨胀至上千行,混杂着业务逻辑和 UI 渲染逻辑时,如何重构?

2015-09-18 11:34:06 +08:00
 davidlau
用什么设计模式 /思路?
3978 次点击
所在节点    iDev
23 条回复
zhangchioulin
2015-09-18 11:41:47 +08:00
一步一步来呗,先不创建更多的文件,先把方法抽出,一个方法做一件事情
然后抽取模型
然后再根据方法抽出 View
view 还能重构成,设置这个 view 控件的位置的一个 model 和生成 view 控件一个 Model
ikaros
2015-09-18 12:22:10 +08:00
你题目已经回答了,把混杂的东西抽出来呗,单独写一个渲染的函数, 业务逻辑 抽出来做成 service 由 controller 调用
ipconfiger
2015-09-18 12:28:06 +08:00
MVVM 啊
StargazerWikiv
2015-09-18 12:29:48 +08:00
当初是怎么想的呢? 1k 多代码一个 controller 。。。
shoaly
2015-09-18 12:31:46 +08:00
说白了 controller 就是一个文件夹, 这个文件夹下面现在太多东西了 , 先试着把文件分类, 然后建立更多的 controller , 将这些文件放过去.
iEason
2015-09-18 12:35:32 +08:00
数据层的全扔到 model 里去,视图该封装的封装。
MVVM 也是不错的选择
xi_lin
2015-09-18 12:54:10 +08:00
页面元素特别多,事件绑定和响应处理特别多怎么破?大家的 View 处理 event 吗?我对 view 的理解一直是纯渲染,交互都给 controller 处理。然后在写复杂页面的时候 controller 就膨胀起来了。我能想到的只有分 category 处理。
pi1ot
2015-09-18 12:55:53 +08:00
辞职走人,下个接手的倒霉蛋会重写的
zhigang1992
2015-09-18 13:04:03 +08:00
MVVM + Rx, iOS 的 DesignPatten 太多了,各种 delegate, KVO, target action, notification, blocks 等等等等。还是 Rx 来的舒服,代码好读好管理
newtonisaac
2015-09-18 13:06:44 +08:00
辞职走人,下个接手的倒霉蛋会重写的
yangjie6020
2015-09-18 13:21:26 +08:00
抽象 封装 剥离
chairuosen
2015-09-18 13:25:04 +08:00
@xi_lin 安利一下 vue
chairuosen
2015-09-18 13:25:34 +08:00
@xi_lin sorry 看错节点了哈哈哈哈
xiaonengshou
2015-09-18 13:28:20 +08:00
angular?
xi_lin
2015-09-18 13:30:44 +08:00
@zhigang1992 Rx 要放弃 7.0 可是公司还要支持,好难过。。
xi_lin
2015-09-18 13:30:54 +08:00
gsanidt
2015-09-18 13:31:38 +08:00
推荐你看看这篇文章: https://www.objc.io/issues/1-view-controllers/
damngood
2015-09-18 13:56:47 +08:00
1. mvvm
2. containment
3. category || extension
4. 常规功能封装
cxq
2015-09-18 14:11:53 +08:00
MVVM 用起来很舒服

不过最近看别人的 android 项目代码,
感觉他 Activity 数量和代码都非常少,看起来非常整洁
主要是因为他们有 Fragment , 和 ListView 的 Adapter 独立出来了
ibcker
2015-09-20 04:50:42 +08:00
mvvm

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX