针对C/S架构的android应用问题描述:分离Activity中业务逻辑,只提供对外改变UI样式接口设想:针对每一个Activity分别提供一个类与其绑定,这个类完成其Activity的相关业务逻辑
参照Spring框架,类似于依赖注入的方式实现欢迎有架构经验的朋友提出意见,对此进行可行性分析....(该板块等级不够,分数不多可以另开贴)
参照Spring框架,类似于依赖注入的方式实现欢迎有架构经验的朋友提出意见,对此进行可行性分析....(该板块等级不够,分数不多可以另开贴)
解决方案 »
- 在模拟器中,怎么给gallery中添加图片
- 如何开发直播流
- 在线等高手---小问题求解决
- ? - TextView.setEms什么意思
- android在运行时怎么获取当前apk的classes.dex二进制内容
- android 通过jni调用gsoap问题
- android 手机实现远程监控怎么通信
- 在Android中访问网络上的JSON资源,应该使用什么设计模式
- android在java层执行input keyevent 4 命令失败?????
- FFMPEG 在Android 4.0运行的问题,求大神们解决!
- Android界面 求一种控件!! 着急。。。。急
- 菜鸟的我想做以下简单效果,但始终没概念,谁能帮帮忙!!
你玩好嵌入式就很有前途了....学技术不在多,在于精!我一直认为什么都懂等于什么都不懂,呵呵....其实所有IT技术组成的是一个树结构,根节点是一样的啦!hoho!!!
我就是学什么都不精,看见不懂的老想问问,琢磨琢磨是怎么回事,处于你所说的什么都不懂的状态~~~
Mark一下这个帖,表示强烈关注,我就是想浅浅的了解下,满足下好奇心、求知欲~ 求扫盲
不过我觉得android本身的设计已经算是MVC的架构了,所以有没有必要一定要spring呢,毕竟应用场景不一样,而且性能是需要考虑的,为一个应用就要弄这么个东西未必合适。
我觉得android的核心设计已经在一定程度上使用了EE的一些思想,比如R,比如所有的UI元素都会自动编译成ID以便调用访问,比如自定义的一些values。等等都是相对来说比较好的思路。最直接的说就是把程序的变化点尽量非程序化。
在spring中的最核心的思想是IoC和面向切面(个人理解),而其初衷也是想把程序的变化点非程序话,通过容器的配置来定制系统。
可能我理解的比较肤浅,还有很多细节的地方可以比较。
所以,没有必要把spring硬搬上来,只是为了抽象UI和业务逻辑来架构android,个人觉得意义不大。因为android本来就是精简的系统,资源占用少,效率要求高,但是如果用spring的话,有悖于这两个思想初衷。
但是说来惭愧,不太了解WEB框架,我个人感觉你的问题有没有必要为了迁就开发团队的知识结构而把不同平台上面的程序一定要整合在一个统一的架构下,在ANDROID下面的STRPING总觉得别扭。
我这么理解,因为是第一眼看没有任何深入的思考,按照LZ的说法,一个ACTIVTY一个对应类的实现方式,那么需要从ACTIVITY继承一个子类以下简称A,也要从实现业务逻辑的父类(以下简称B)来继承一个子类(以下简称C),在这个类A要操作一个实现业务逻辑类的父类(简称B)的对象来完成业务逻辑,那么就需要创建A类的对象的时候传递一个业务逻辑类B的子类对象做为参数。
这个看起来也没什么问题,我只是直觉上,感觉业务逻辑类的实例可能也需要操作ACTIVITY类的实例来完成工作,可能会有耦合性上的问题,没有深入想,请楼主补充吧,这真是一个很有意思的问题,希望我能抛砖引玉。
一会我试一下能不能给贴子加分:)
Context这个实例牵涉的范围太广了,对一个Activity中UI操作必定会涉及到它要实现类似Spring的依赖注入,需要解决这个context的创建问题空下来我会考虑去看下android的上层框架Context的实现楼下有人看过,希望给予指点,谢谢~~
应该是做J2EE开发的习惯使然,所以也考虑过楼主说的这种情况,将业务逻辑从activity中剥离。
业务类中需要操作activity还找不到合适的方法解决,只是有个想法,能不能将activity中对UI的操作也剥离出来呢?剥离出来的这部分作为一个贯穿多层的切面来使用。
呵呵,想法很不成熟,只是发表下自己的观点。
我建议各位不要也永远不要在android这些客户端开发上使用诸如spring,ioc,反射这样的玩意,你会遇到你无法想象的各种各样的麻烦(事实上我就遇到过各种各样的),而且你往往会束手无策。你得到的所谓的解耦和你所付出的根本不成比例。
首先android的代码经常要混淆,一旦你使用坑爹的反射,你就等着好好研究混淆策略吧
其次很多时候你写的是库,你根本不知道对方要如何使用。而使用了反射,你很有可能需要带上一个很巨大的框架。而这是没必要的。(我集成过一个支付框架,使用坑爹的反射,我看手册的时候差点都被绕晕了。这就是那些人喜欢折腾的所谓设计模式)
再有,使用反射很多时候你会绕过基本的代码检查,会绕过系统框架的定义,不利于一些自动化测试工具(这些工具有时候会做一些假设),诸如如果你要把应用提交到亚马逊上,它们自带了一个代码注入检测工具,你的应用很可能会被拒绝
最后,程序就是程序。简单,直接,明快是最重要的设计思路。模块化,清晰的接口才是重点,至于花里花俏的,不仅你用起来烦,别人看起来更烦。
“效率本质上是空间和时间的转换~~~”
不太同意,太机械了吧,如果一个架构和一个平台,只是靠硬件堆砌的...不能说是高效吧。(这里说MTK是不是很土气)我觉得一个好的架构,应是有活性的,功能间有结合而不是分离是更好的效率。Android历来注重效率的观念很正确。
我这么理解,因为是第一眼看没有任何深入的思考,按照LZ的说法,一个ACTIVTY一个对应类的实现方式,那么需要从ACTIVITY继承一个子类以下简称A,也要从实现业务逻辑的父类(以下简称B)来继承一个子类(以下简称C),在这个类A要操作一个实现业务逻辑类的父类(简称B)的对象来完成业务逻辑,那么就需要创建A类的对象的时候传递一个业务逻辑类B的子类对象做为参数。
这个看起来也没什么问题,我只是直觉上,感觉业务逻辑类的实例可能也需要操作ACTIVITY类的实例来完成工作,可能会有耦合性上的问题,没有深入想,请楼主补充吧,这真是一个很有意思的问题,希望我能抛砖引玉。
接着昨天的说吧,我觉得让这个ACTIVITY子类A直接拿着一个业务逻辑的实例也有问题,还是再创建一个类同时拥有ACTIVITY与业务逻辑的实例比较好,另外这个类当中至少还应该有一个属性还标明CURRENTWORKING。
大家继续。
之所以要分层是为了降低耦合性,提高扩展性
为什么10多年前写代码这么注重效率?那是因为当时内存很贵,不释放内存会被认为是很大的BUG
一般玩Java的有多少人写逻辑代码的时候会考虑到效率问题
如果以后Android硬件上达到电脑的配置,你还会选择效率第一,架构第二??
就现在Android的硬件配置跟电脑相差太远,效率会是合理的选择
所以我的标题也只是探讨~~~~~
事实上android现在的manifest就是一份类的配置文件,启动activity的时候就是用反射的机制。但是它也就限于此了,而没有继续搞一大堆。
如果真要扯设计模式的话,那我不明白在客户端上你要aop干什么。spring之所以用aop,是为了事务加锁,为了日志,为了鉴权。而android大部分是客户端程序,涉及到UI,如果你有去了解每一个UI的设计者的思路的话(比如MFC作者,cocoa的作者)就会知道,他们有许多东西需要权衡。UI跟逻辑是绑得很紧密的,一方面为了快速响应,一方面很多时候你很难说清,到底“改变一个按钮的颜色”这个到底属于UI还是逻辑。如果你非要分割的话,那很有可能你就会得到两倍的代码,而你新增的耦合层也异常巨大。
事实上不同的UI框架都致力于改善这种局面,qt使用槽,cocoa使用绑定,都在朝一个方向解决:UI能响应逻辑,并且是透明的。也就是说,如果你按钮的颜色是跟随着某个变量而改变的,那么当你这个变量的值改变时,按钮的颜色自动改变,而无需在按钮的listener中去手动的调用 btn.setcolor,这一切都是透明的。
另外,从更高的角度讲,即便真要引进一个所谓的框架的话,我也建议使用代理而非反射的机制。接口!接口编程才是方向。
原理其实就是TI自己有个解析器,去解析我们写的JS.这些JS暴露在assets目录下
看TI的AndroidManifest.xml看出,他就只有几个activity,然后把每个JS当做一个VIEW的动态生成.
思想是很好.可是TI还有待完善,公司做的3个TI的项目本来做还好,但后来发现,对日益增加的需求,不能很好的响应.
感觉LZ想法不错,但目前android手机的硬件配置来看,暂时不是特别需要。而且现在android的应用很多还是类似作坊式的生产。
不过以目前android手机硬件的发展来看,而且android未必一定用在手机,其他嵌入式设备也可使用,所以以后这类框架的出现也是一个必然的趋势。
安卓现在比苹果差就差在系统及应用的流畅度上
我二者都在做,对这个深有体会
你可以让你的代码更条理但是不要让他们更臃肿,这样有利于你的开发同时也有利于运行的流畅度。
框架过于臃肿,冗余代码太多,个人认为不适合加入到手机客户端中。
况且像安卓不同分辨率不同配置的机型执行APP的能力也不同,所以保证最大的通用性才是目前最该考虑的事情。
如果扩展性好了,根本跑不起来,或者用户体验很差,那这项目也是失败了----------------------------
http://www.purji.com/