您的位置:首页 > 移动开发

开源一个小APP(明天计划),欢迎交流Android架构

2017-03-16 00:00 323 查看
项目传送门:http://git.oschina.net/imxiaoyu/TomorrowPlan

版权声明:本app进提供交流使用,版权归我本人所有,本套架构可以随意使用,但不可将APP上传各大应用市场,若是使用本套架构而非同类型产品,则无限制。

整套架构的核心在于将业务、逻辑、代码的粒度划分得更细,尽量让每一个类的代码不超过三百行,业务分类更加的清晰明了,把UI和业务逻辑尽量的结耦合。

WiKi有粗略的说明,不明白或者有觉得不妥的地方,欢迎加入交流群(群号:616045201)

项目的不足:
因为这个app一开始的时候并不是用的这个架构,只是花了一天的时间重构整理,所以很多地方整理的并不是很彻底,所以可能会出现某些地方看着有些不伦不类。之后如果有精力,可能会抽点时间再整理一下。
common模块我是搭建有另外的一个库,所以这里就把common的git管理去掉了,之后会一直更新,当然,更新的幅度不会很大,主要是更新一些我需要用到的工具类或者UI组件。传送门:http://git.oschina.net/imxiaoyu/android_common_tools

APP截图:










代码包大致目录:



架构大概说明:

整体架构

整个业务处理的架构采用的是类MVP架构,最核心的思想是吧系统的粒度降到最小,能分就往下分,让每一个类最多不超过300行代码。整体架构主要氛围4个结构:common、core、domain、module:
common:主要是用于存放一些公共类库、组件、工具等等,为方便管理,独立成了一个库出来,可以多个应用共享使用。
core:主要存放一些与项目相关的配置文件、辅助工具、信息缓存等等。
domain:程序入口
module:具体的业务模块,后续会详细讲解

Common详解

base

base主要用于存放一些常用类的父类(基类),主要作用是方便快捷的为一些重复性的业务提供更为方便快捷的方法。主要需要注意:adapter、helper、presenter、ui、popup_window这几个包。每一个Activity如无特殊需求,都必须继承于BaseActivity。

impl

impl主要用于存放一些常用的自定义回调接口。

utils

utils主要是各种各样的工具类

widget

widget主要是存放一些有特殊功能的自定义控件

Core详解

cache

cache下的每一个类都需要继承BaseSharedPreferences,主要作用是缓存数据,列表数据通常都是采用json字符串的当时缓存通过轻量级存储SharedPreferences来完成。

custon

算是整个程序的入口,具体需要在androidmainfest.xml中配置

entity

一些用到的或者可能用到的实体类

network

主要是存放tcp连接相关的一些东西,如果是http请求的话,会将封装的一些东西,放在跟network同级别的一个叫做http的包里

remote

主要是遥控器的,负责的是与SDK的交互操作,接口地址:https://wiki.bomeans.com/index.php/Android_IR_SDK

route

route只有一个类AppRoute,起作用主要是将整个app的所有页面跳转都集中到AppRoute这个类来处理,相当于是请求分发。而具体的跳转方法不再使用原始的startActivity(intent);的形式,而是将StartActivity方法封装在每一个Activity页面的一个公共的静态方法中,如果需要带值跳转,则可以更加的方便处理,如:

public static void startActivity(Activity activity,int sceneType){
ALog.e("sceneType1:"+sceneType);
Intent intent=new Intent(activity,SceneEditorActivity.class);
intent.putExtra(ACTIVITY_DATA_SCENE_TYPE,sceneType);
startActivity(activity,intent);
}


Domain详解

没啥好说的,程序的第一个页面,通常是启动页

Module详解

Module下面通常会根据项目的大小对项目进行分层,本项目采用的二层的形式,即要定位到一个HomeActivity页面,类路径是module.home.home.HomeActivity.class,即Module的本身是一个大模块,然后根据功能分类划分为多个小模块,最后每一个小模块有多个页面。在module.home.home中,第一个home是一个多个小模块,会包含多个页面,第二个home则是具体的页面集合,因为一个页面不单单只有Activity类一个类,还需要其他配套类,所以第二个home可以说只是HomeActivity这个页面的类合集。

第二个home的主要结构是HomeActivity类,然后还会继续的分几个包,具体的包会根据需求而定,主要有四大类:view、adapter、helper、presenter。

view

一个Activity虽然只算是一个页面,但是一个页面也会有许许多多的复杂情形,若是逻辑或者任务简单,可以直接写在Activity中,但是如果是业务稍稍复杂一点,那就按具体的任务分出来会方便管理很多,可扩展性也强上很多。

adapter

列表适配器,值得注意的是,最开始的ListView或者GridView,都统一用recyclerview来替代,而adapter和里面的holder都需要基础Base基类, 详情看core/base里面的类。

helper

小工具类,介于普通的方法和Utils公用工具类之间。,即只是针对本APP的特定场景的小型版本的Utils。

presenter

主要用于处理一些比较繁杂的且与UI无关的业务,如:网络请求等

其他注意事项

在同一个“home”包下,无论是activity还是其他的view、helper、presenter等等,都应该是互联互通的。即view里面可以通过HomeActivity的方式将getActivity()强制转换成homeActivity对象,然后对其他的helper、view等做交互处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐