Android应用程序架构 – build议的模型是什么?
Web或桌面应用程序可能有三个或三个层,例如用户界面(UI),业务(Business),数据(Data) – Android应用程序的build议结构是什么? 你如何将课堂分组在一起,你有什么层次?
我刚刚开始Android开发(一个基于互联网的应用程序,必须响应传入的通知),并没有真正的感觉我所瞄准的结构。 build议感激。
恕我直言,Android“想要”遵循MVC模式,但视图和控制器通常真正耦合在活动中。
这使得unit testing变得更加困难,很难服从单一责任原则 。
我发现了一个非常好的Android架构 ,可能有一个想法。 一切都松散耦合,更容易testing和编辑。
显然,我确定有很多其他的可能性(如MVP模式( Model View Presenter ) – 这里是关于Android中MVP的答案 ),但是你仍然应该看看它。
Android中的动作,视图和活动是与Android UI一起工作的,并且是模型 – 视图 – 视图模型的实现,其在结构上与模型视图控制器相似(在同一族中)。
据我所知,没有办法摆脱这种模式。 它可能可以完成,但是您可能会失去现有模型的所有好处,并且必须重写自己的UI层才能使其工作。
你可以在下面findMVC:
- 您可以通过分辨率/硬件等在各种XML文件中定义您的用户界面 。
- 您可以通过语言环境等在各种XML文件中定义您的资源
- 您可以将数据存储在SQLite中或您的自定义数据存储在/ assets /文件夹中,详细了解资源和资产
- 你扩展类如ListActivity , TabActivity和充气器使用XML文件
- 您可以根据自己的模型创build任意数量的类,并拥有自己的包,这将作为一个结构
- 很多Utils已经为你写了。 DatabaseUtils,Html,
没有单一的MVC模式,你可以服从。 MVC只是说或多或less地说,你不应该混合数据和视图,以便例如视图负责保存正在处理数据的数据或类直接影响视图。
但是,Android处理类和资源的方式,有时甚至被迫遵循MVC模式。 在我看来,更为复杂的是有时候为了观点而负责的活动,但同时也是一个控制者。
如果你在xml文件中定义你的视图和布局,从res文件夹中加载你的资源,如果你或多或less地把这些东西混合在你的代码中,那么你的方式就是遵循MVC模式。
我意识到这个问题非常古老,但是我觉得这个问题对别人来说可能是有用的,像我这样一个通过search绊倒它的人。
从服务器端的背景,我已经在Android上工作了9个月,在这个背景下,完整的unit testing和分层架构是常见的,并且运行良好。
通过大量的试验和错误,我强烈build议使用Model View Presenter
模式,而不是模型视图控制器。
我发现一个巨大的问题是Activities
/ Fragments
有一个不受您控制的生命周期,可能会导致意想不到的问题。
例如,我们的主要Android应用程序希望在平板电脑上以横向模式使用。 我们在OnCreateView()
或OnCreate()
执行此操作。
在Nexus 7上,默认视图是肖像,所以发生的是它以纵向模式启动活动,我们的代码然后说到风景和android最终创buildactivity
类3次!
我们已经将networking请求连接到了onCreate
并且在这种情况下最终发生了3次。
当然,我们可以添加逻辑来查找重复调用,但在我看来,从体系结构上来说,尝试从业务逻辑中划分UI会更好。
我的build议是使用工厂模式从活动创build演示者,但要确保工厂只返回相同的实例。 然后主讲者可以包含执行networking请求的逻辑,查找重复项并返回caching结果和一般业务逻辑。
当来自networking调用的结果返回时,或者发布到诸如Otto之类的总线上onResume()
在onResume()
上注册事件并在onPause()
)注销,或者确保活动实现的callback接口已经更新到主讲人的最后一个活动。
这样,向下presenter
代码是unit testing的,不依赖于片状UI层testing。
MVP是大多数人所关注的最新架构这里是小文档正如Bob叔叔的清洁架构所说的:“架构是关于意图而不是框架”
观看这个video,它只是令人振奋的好。
这里有一个专门针对Android体系结构蓝图的项目,其中有详细的源代码。 所有这些都是基于MVP模式的几个曲折。 还要根据代码行,可testing性,学习成本以及对增加数据复杂性的支持来检查各种解决scheme的比较 。 这取决于特别开发的应用程序和上下文(上市时间,开发人员,未来计划等),蓝图最适合。