h5房卡牛牛源码Android的开发生态系统发展迅速

Android的开发生态系统发展迅速,在开发Android的几年的时间里,h5房卡牛牛源码-网站httl:\h5.hxforum.com 企鹅2952777280用来构建Android应用的架构与技术一直在不断进化。随着项目的不断更新迭代,应用的架构也有不一样的变化。由于开发人员的数量、项目的业务复杂度、需求的开发时间、应用的使用量级,使用的技术架构也不相同。没有最好的架构,只有最合适的。通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,便于项目的后期维护。下面总结及汇总一下目前Android使用的主要应用架构及其优缺点和使用的学习心得,如有不对之处,欢迎交流纠正。
mvc
还记得以前学生时代学习.NET的时候,第一次接触到项目架构叫三层架构。应用层、业务逻辑层及数据访问层。mvc的思想其实也一样,都是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。Android的项目设计本身也是采用了mvc的设计思想。
? 视图层(View)
一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入。同时便于后期界面的修改。逻辑中与界面对应的id不变化则代码不用修改,大大增强了代码的可维护性。
? 控制层(Controller)
Android的控制层主要就是Activity层。相关View层交互触发及数据展示逻辑都在Activity中进行编码。
? 模型层(Model)
我们通常针对业务数据,都会定义好对应的Model层。数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的
所以一直以来我们使用Android默认的项目结构开发,主要都是在采用mvc的架构思想。
优点: 适用了简单的页面展示,业务逻辑不复杂。开发效果高,代码层级也简单易懂
缺点: 当业务复杂时,Activity非常臃肿,不便于维护及测试
mvp
mvp这是目前我们项目中主要采用的应用架构方式,MVP从更早的MVC框架演变过来,与MVC有一定的相似性:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。mvp架构的演变,解决了Activity代码臃肿的问题,当我们将Activity复杂的逻辑处理移至另外的一个类(Presenter)中时,Activity其实就是MVP模式中的View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由 Presenter处理)。项目开发中,UI是容易变化的,且是多样的,一样的数据会有N种显示方式;业务逻辑也是比较容易变化的。为了使得应用具有较大的弹性,我们期望将UI、逻辑(UI的逻辑和业务逻辑)和数据隔离开来,而MVP是一个很好的选择。在MVP模式里通常包含3个要素(加上View interface是4个):

? View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity)
? Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合)
? Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。
? View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试
优点:

  1. Model与View完全分离,修改互不影响
  2. 更高效地使用,因为所有的逻辑交互都发生在一个地方—Presenter内部
  3. 一个Preseter可用于多个View,而不需要改变Presenter的逻辑(因为View的变化总是比Model的变化频繁)。
  4. 更便于测试。把逻辑放在Presenter中,就可以脱离用户接口来测试逻辑(单元测试)
    缺点:需要拿捏好Presenter、View interface的颗粒度设计,容易出现Presenter过于简单或则复杂化。
    mvvm
    MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力

? View(视图层)采用XML文件进行界面的描述;
? Model(模型层)通过网络和本地数据库获取视图层所需数据;
? ViewModel(视图-模型层)负责View和Model之间的通信,以此分离视图和数据。
View和Model之间通过Android Data Binding技术,实现视图和数据的双向绑定;ViewModel持有Model的引用,通过Model的方法请求数据;获取数据后,通过Callback(回调)的方式回到ViewModel中,由于ViewModel与View的双向绑定,使得界面得以实时更新。同时,界面输入的数据变化时,由于双向绑定技术,ViewModel中的数据得以实时更新,提高了数据采集的效率。
采用ViewModel解决MVP中View(Activity)和Presenter相互持有对方应用的问题,界面由数据进行驱动,响应界面操作无需由View(Activity)传递,数据的变化也无需Presenter调用View(Activity)实现,使得数据传递的过程更加简洁,高效。
推荐教程:
精通 Android Data Binding
优点:
? 双向绑定技术,当Model变化时,View-Model会自动更新,View也会自动变化。很好做到数据的一致性
? Google官方支持databing,易于集成
缺点:
? 数据绑定使得 Bug 很难被调试
? 数据双向绑定不利于代码重用及扩展
? 代码的阅读性降低
android-architecture
google在官方示例中给出了一系列不同架构的app实现,项目目的是通过展示各种架构app的不同方式来帮助开发者解决架构问题。项目中通过不同的架构概念及方式实现了功能相同的app。
Google官方MVP架构示例项目
TODO-MVP-RXJAVA
使用RXJAVA对数据流进行处理,并且通过Repository进行数据的集中管理,通过协议类XXXContract来对View和Presenter的接口进行内部继承,在presenter的实现类中,可以对Model数据进行操作。实例中,数据的获取、存储、数据状态变化都是model层的任务,presenter会根据需要调用该层的数据处理逻辑并在需要时将回调传入。这样model、presenter、view都只处理各自的任务,实现单一责任原则。
推荐教程:
Google官方MVP+Rxjava项目详解
组件化
随着项目的推进,及企业业务的发展。有一天可以发现团队内部需要开发多个APP,且多个APP中存在相同的业务模块,一开始的做法为了赶项目进度可能就是黏贴复制,到后面就慢慢发现越来越吃力,重复劳动。
慢慢随着时间的推移,恶性循环。慢慢发现项目代码结构混乱、层次不清,各业务技术方案不统一;甚至连基本的包结构也是胡乱不堪,都是不停地往上堆砌代码添加新功能,前人挖坑后人填。可见组件化对于不断迭代的项目有着深远的意义

  1. 避免重复造轮子,提高开发效率
  2. 减低耦合度,提高复用性
  3. 保持团队的技术方案统一性
  4. 便于维护升级
    基础组件化
    通常项目中常用的结构如下:
    看似没什么问题,但通常我们的一些库都是以代码的形式集成在代码中,随着项目推进,慢慢发现一些比较严重的问题。
  5. 业务代码侵入组件代码中 (例如一些全局的网络返回响应,直接在库中编码等)
  6. 团队内部没约束,各自集成不同的基础库(例如图片加载有的用Glide,有的用ImageLoader)
  7. 部分第三方组件停止更新,项目代码耦合高,替换新方案难
    所以在实际设施组件化的过程中,建议参考:
  8. 独立library库(Common基础组件),避免在主工程中直接以代码集成,使用aar方式引用
  9. 第三方的库调用最好再装一层接口,以便后续维护升级
  10. 有成员专门负责维护,可以以SDK的方式提供业务层的调用
    业务模块化
    随着项目逻辑不断的增加,慢慢是不是发现代码编译速度是不是越来越慢?(PS:我们目前项目编译一次2分钟,且已是经过一些优化处理)
    另外当团队内部有多个项目时,是不是经历过产品经理让你把项目A的某个功能移到项目B去,这个时候… …
    业务模块化的作用性就很明显了

原文地址:http://blog.51cto.com/13574367/2061047

时间: 2024-10-11 07:17:01

h5房卡牛牛源码Android的开发生态系统发展迅速的相关文章

h5房卡牛牛源码搭建架设教程之微信端和电脑端服务器架构

类型1:卡牌.跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器: 登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥(h5房卡牛牛源码搭建架设Q_2189563389),计算哈希得到的加密 key 并发送给客户端.之后双方都用 HTTP通信,并用那个key进行RC4加密.客户端收到key和时间戳后保存在内存,用于之后通信,服务端不需要保

h5微信房卡牛牛源码学习讲解

h5微信房卡牛牛源码Q 2171793408 官网地址: http://wowotouba.com/h5 比较仔细的学习了<c++primer>,并对每个习题都自己写代码实现了一遍,包括稍微复杂一点的例子. 认真读完了<effective c++>,<effective stl>. 比较仔细的学完了<数据结构与算法分析>,并把其中的每种数据结构和算法都用c++实现了一遍.包括各种线性表,树(二叉树.AVL树.RB树的各种操作),图(BFS.DFS.prim.

h5房卡牛牛平台出售朋友圈那个随便辞职的年轻人,后来活成了什么样?

前些天,一个读者问我:h5房卡牛牛平台出售(h5.hxforum.com) 联系方式170618633533企鹅2952777280 微信Tel17061863533 辞了职,现在后悔了,又回不去了,该怎么办? "老实说,当时把辞职后的生活想得太美好,出来之后才知道,一切从头开始,而寻找这个开始的感觉,真的不知如何是好." 我不知道怎么安慰他,我只给了他一个建议:学一项本事,越精通越好. 我说,我想梳理一篇文章,给许多希望辞职的年轻人,他说,你可以以我的例子开始. 大概是因为大家知道,

青龙大厅源码出租Android的开发生态系统发展迅速

前言Android的开发生态系统发展迅速,在开发Android的几年的时间里,用来构建Android应用的架构与技术一直在不断进化.青龙大厅源码出租(h5.hxforum.com)企鹅2952777280 源码出售 房卡出售 后台出租随着项目的不断更新迭代,应用的架构也有不一样的变化.由于开发人员的数量.项目的业务复杂度.需求的开发时间.应用的使用量级,使用的技术架构也不相同.没有最好的架构,只有最合适的.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发

房卡麻将源码下载十三水房卡麻将源码搭建教程

代码中需修改的地方:1.cocos2d-x-3.14.1\cocos\Android.mk 里面 #$(call import-module,curl/prebuilt/android)修改成$(call import-module,curl/prebuilt/android) 2.cocos2d-x-3.14.1\extensions\Android.mk 添加如下  目的是为了支持外部静态curl库LOCAL_STATIC_LIBRARIES += cocos_network_staticL

CountDownLatch &amp; CyclicBarrier源码Android版实现解析

CountDownLatch CountDownLatch允许一条或者多条线程等待直至其它线程完成以系列的操作的辅助同步器. 用一个指定的count值对CountDownLatch进行初始化.await方法会阻塞,直至因为调用countDown方法把当前的count降为0,在这以后,所有的等待线程会被释放,并且在这以后的await调用将会立即返回.这是一个一次性行为--count不能被重置.如果你需要一个可以重置count的版本,考虑使用CyclicBarrier. 其实本类实现非常简单,和Re

wemall app商城源码Android数据的SharedPreferences储存方式

wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android数据的SharedPreferences储存方式,供技术员参考学习.        SharedPreferences:除了SQLite数据库外,SharedPreferences也是一种轻型的数据储存方式,它的本质是基于XML文件存储key-value键值对数据,通常用来储存一些简单的配置信息.Sha

wemall app商城源码Android之支付宝通知处理类

wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之处理支付宝各接口通知返回,供技术员参考学习. 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码,该代码仅供学习和研究支付宝接口使用,只是提供一个参考,调试通知返回时,可查看或改写log日志的写入TXT里的数据,来检查通知返回是否正常. w

飞行熊猫游戏源码android版

这款游戏是前一段时间完成的一个项目,飞行熊猫游戏源码android版,飞行熊猫基于cocos2d游戏引擎开发,包括了谷歌admob广告支持,没有任何版权问题,大家可以自由修改和上传应用商店. 1.本游戏支持无限关卡. 2.源码包也包括了游戏PSD格式资源文件,可自行修改图片. 3.自适应各种屏幕分辨率, 支持android2.1+ 源码下载: http://code.662p.com/view/6682.html <ignore_js_op> <ignore_js_op> <