mvc 一个controler 多个view

刘文涛原创,转载请注明出处。

[b]1.普通意义上的一个controler一个view[/b]

[img]http://dl.iteye.com/upload/attachment/0067/3537/79c468b4-9141-343b-a7a8-7486278e20e2.png[/img]

[b]2.我要说明的一个controler多个view[/b]

[img]http://dl.iteye.com/upload/attachment/0067/3541/8e7a9fa3-4c5a-3c69-bb1b-4b7a11cb0671.png[/img]

[b]3.控制器的作用[/b]

视图选择,举个例子:

[img]http://dl.iteye.com/upload/attachment/0067/3544/64ad9680-ae0f-374f-9e24-c2f3d0d31068.png[/img]

同样的数据,有时候想显示 表格形式,有时候想显示成图表 (注意:需求不希望2个同时显示),实现方式有3种:

1):多个controler,
每个controler 返回一个view ;controler里面 调用相同的service方法,获得数据(M).
优点:A:controller中不需要判断该去哪个view(每个需求是不同的入口。)
缺点:A:代码逻辑重复(controler中), controler泛滥

2):一个controler一个 view ,
在view中通过if else 控制哪些显示,哪些不显示。
优点:A:controler少,view 少
缺点:A:view 里面有控制显示不显示的逻辑代码,可读性不好,view层本来是用来做表现的,它做了“额外”的工作。B:不同view 要求必须有相似的界面结构,很难满足差异化需求。比如 一个是左右结构,一个是上中(左右)下 结构。这时候view层里的逻辑简直就是灾难。

3):一个controler多个view ,
在controler中通过条件判断该选择不同的view ,每个view 可以从controler 那里拿到相同的数据(M) ,按照自己的风格个性化 呈现。

优点:A:controler 恰当的扮演了 “准备数据” 和 “视图选择” 的 角色。B:视图层没有顾虑只考虑一种情况。C: 不同视图可以天马行空的实现自己的界面布局,彼此之间互不受影响。

缺点:A:view 文件多了,不同view 之间如果有相同的代码,要重复的 写 。

[b]总结 :[/b]

i: 复杂的可扩展要求高的应用,推荐采用 3) 这个方案,对于 3)的 缺点 ,可以采用 include 公用文件,或者自定义标签的形式来解决。
ii: 2)与3)的区别还在于 :

2)很多时候是 用条件判断 include 不同的代码,保留相同的代码,不同的代码越多,越乱。 拥抱 “相同的”。
3)相同的代码,要重复的写,相同的越多越觉得重复,修改起来每个view都要改,对于不同的代码这个方案非常欢迎,拥抱“不同的”;

而问题是如果有 10个view 每3个总能找到相同的,而相同的又不同时适用于10个,这时候,这时候 不但 3)方案有点麻烦,2)方案也麻烦。这时候多采用自定义标签,对界面做细粒度的封装 是不错的选择。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模拟实现一个多功能电子设备,它既能播放mp3歌曲,同时还能够借助播放器的界面来监测脉动。 1.这个设备有一个屏幕,屏幕上可以显示两种界面: 界面1是显示视图,有一个进度条,可以显示当前所播放音乐的节拍或是脉动,以节拍为例,比如是100 BPM 还是 120BPM(BPM是节拍的度量单位)。还有一个文本,显示“Current BPM: xxx”. 界面2是控制视图,上面的控件有: 1)有一个菜单条,上面有一个菜单,菜单里有“start”、“stop”和“quit”命令。 2)有一个输入框,旁边的文本为"Enter BPM:",可以在输入框内容输入特定的节拍。 3)有一个“set”按钮,可以改变每分钟的节拍数。 4)还有两个微调箭头按钮“<<”和“>>”,使用这两个按钮可以微调节拍的值。 注意,选择“start”开始产生节拍,选择“stop”停止产生节拍。在选择开始产生节拍时,stop都应该是无效的,但是节拍产生后,start应该是无效的。 2.该设备配有一个控制器,控制mp3播放,存储播放歌曲的数据和节拍状态,并包含播放mp3的逻辑。 3.该设备还可以监测脉动。 4.在播放MP3时,在界面2上调整节拍后,会调整mp3播放器歌曲的节拍,同时界面1上显示出当前歌曲的节拍状态。 5.在做监测脉动时,屏幕界面2上所有的设置按钮都是无效的,因为我们不能去设置脉动。 总之,希望界面可以复用,希望模型数据的变化能够反映到界面上 看看能不能使用观察者模式、策略模式、适配模式,另外设计时将界面显示view、控制controler、模型model分开

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值