【如何简单的构建Android()】黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述如何简单的构建Android?相关的知识,希望能为你提供帮助。
原文链接:https://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
过去的几个月中,在Tuenti上与同行例如@pedro_g_s和@flipper83进行了一些讨论。我决定去写一篇关于Android APP架构的文章。
写这个文章的目的是为了向你们展示一些我自己的方法,这些方法已经存在我的脑中好几个月了,主要来自于我自己的学习和研究。原文链接:https://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
过去的几个月中,在Tuenti上与同行例如@pedro_g_s和@flipper83进行了一些讨论。我决定去写一篇关于Android APP架构的文章。
写这个文章的目的是为了向你们展示一些我自己的方法,这些方法已经存在我的脑中好几个月了,主要来自于我自己的学习和研究。
开始行动
我们都知道编写高质量的软件是很难的而且很复杂:这不仅仅是满足需求,而应该是健壮的,易维护的,可测试的和可扩展的。所以提出的“简单的架构”理念是一种好的开发任何软件应用的方法。
想法很简单:“简洁架构”代表一组实践方式它的系统包含以下内容:
- 独立的框架
- 可测试的
- 独立的UI
- 独立的数据库
- 独立的外部机构
文章图片
并不是必须而且只能用4个圈表示(如图上所示),但是这里有一条从属规则必须知道。这个从属规则是:代码的依赖只能是指向内部的,而且只有内圈能知道外圈的内容。也就是外部的圈是无法知道内部圈的内容的。 以下是一些能让我们更好的熟悉和理解这个方法的一些名词解释:
- Entities:应用的业务对象
- Use Cases: 也叫交互器。用户实例由与Entities的数据流组成。
- Interface Adapter:这里设置一些适配器将数据转换成user case 和entities能用的格式。Presenters 和 Controllers 属于这一层。
- Framework 和Drivers: 这里是真正的实现区域,如:UI,工具,frameworks等等。
文章图片
文章图片
文章图片
文章图片
在实例中,当我们通过Id来获取用户实例的时候,首先会选择磁盘缓存,如果不存在的话会通过网络获取数据然后保存在本地磁盘中。 这种机制的前提条件是数据源对于客户端来说是透明的,它不必关系数据是来自内存,磁盘或者是云数据库。只要相信可以获得到数据即可。 注释:在实例中,因为只是为了学习,我通过一个文件系统和android preferences来实现简单和原始的磁盘缓存。再次铭记不要重复造车轮。 Error Handling 这个是我们应该总是优先讨论,如果分享你的解决方案会更好。 我的策略是使用回调函数,如果一些错误发生在数据库,那么回调会有两个方法onResponse()和onError().第二个方法是会将异常封装在一个叫"ErorBundle"的类中:这个方法会带来一些困难因为存在一个链式的回调,一个接一个的知道错误到了presentation层,但是如果代码写的易读会将这种困难度减低。 另一方面,我会实现一个evetn bus 系统来处理错误事件,这个系统叫GOTO . 在我看来,有时如果订阅太多的事件,但是又没有控制紧密会导致一些事件丢失。 Testing 对于测试工作,我选了几种对应不同层的解决方案。
- Prestation layer:使用android instrumtntation 和espresso去做集成和功能测试。
- Domain layer:Junit 加mockito 对于单元测试。
- Data Layer:Robolectric加junit加mockito用于集成和单元测试。
- presentation:这是android 模块,代表presetntaion Layer.
- domain:纯粹的Java模块无任何Android关联。
- data:获取数据的Android 模块。
- data-test:针对Data layer的测试。由于使用Robolectric的限制,所以我要单独分离出来。
- 易于维护
- 方便测试
- 高内聚
- 低耦合
推荐阅读
- springcloud-app
- appium相对位置定位元素----父节点/兄弟节点定位
- Codeforces 931D Peculiar apple-tree(dfs+思维).cpp
- Android WebView 保持登录问题
- 怎样安装Appium
- webpack 3.8 使用 extract-text-webpack-plugin 3.0 抽取css失败(You may need an appropriate loader to handle)
- Android Studio 第五十九期 - Android动画支付打勾勾
- Android编程实现点击链接打开APP功能示例
- Happy Number