MVC分层影响代码重用的小感受

本文通过一个Android项目的实例,探讨了MVC架构在代码复用方面的优势与挑战。特别是针对固定字符定义及View与Control之间的强耦合问题,提出了有效的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓的MVC,一直被强调关注的东西,做了很多项目,也就一直把它当概念在听,优点什么的并没什么深切的感受,只知道能降低耦合,让层次更明确,说实话在实际作业中,除了觉得各层次分得比较清楚外,并没感觉到什么特别的,也是自己理解不够深的原因吧。不过,最近遇到的问题,对MVC分层的有一点直观的感受。


项目是Android应用,后期希望根据它做2个姐妹版,其实也就是换换壳子,增减一点小功能,代码都是差不多的,不重用当然是浪费了,于是开始抽成共通source。还好前期的代码,MVC原则遵循的还可以,各层次之间分得也很清楚,什么dao,logic,facade等简单的copy就OK了,主要问题集中在以下两点:

1. 固定字符定义
        也就是Constant的定义了,其中有对包名的定义,前期没考虑扩展性就简单写死在代码中,另外也存在对应3个项目有不同值的定义,于是想把这共通得不能再共通的Constants抽成共有的代码变得复杂了。最后想的解决方案是定义一个类似bean的单例类,声明这些不易共通的变量,Constant里的变量指向这个单例类,在自定义Application生成这个单例类,并完成赋值。子项目里重写自定义Application的方法即可。

2.View与Control、Model与Control的强耦合
        项目中有这样的情况,自定义的View只在某一个Activity中使用,在View中会回调某具体Activity的方法,在View中就出现了这样的代码:XXXActivity xxxx = XXXX;  xxxx.xxx();  如此的结果就是,View无法被其它Activity使用了,而且如果Activity无法抽成共通的话,这些View也无法共通了,不过项目原因,考虑到各自派生项目画面有自己个性的功能存在,Activity这层不进行共通化了,另外某些Model层也存在类似的问题。只能尽可能去除这种强耦合了,使用的解决方案是:共通化出各Activity的抽象base类,在此base类里声明涉及强耦合的方法,在相关View或Model中把对某一具体Activity的变量声明转变成抽象类的声明,各自的派生项目中,各Activity继承此base类,需要的就重写方法即可。

第一点跟MVC似乎没什么关系,只是提醒在程序设计中,这些定数的定义也赢适当考虑其扩展重用性。
第二点则表现出,MVC层次分明,耦合降低的好处了,各层次间存在强耦合的话,势必影响到其扩展重用性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值