Android开发中的devise模式原理是什么?

我是一个JaveEE开发人员。 最近我join了一个Android开发团队。 Android的结构令我困惑。 MVCdevise模式似乎不适合Android开发。 那么Android开发的devise模式原则是什么? 我的意思是有什么暗示如何写一个干净,简单的阅读和有效的Android代码。

Solutions Collecting From Web of "Android开发中的devise模式原理是什么?"

起初,Android的架构让我恼火,但我开始看到一种疯狂的方法。 这是由android文档很好解释。 我最大的抱怨一直是,你的活动共享就像一个普通的应用程序一样,很难有一个集中的数据模型。 Android似乎希望我成为一名游牧民族,因为我只能在我的活动之间分享原始人。 在数据库中丢弃垃圾不是一个模型,因为它不包含任何行为。 所以,大多数人的业务逻辑都以我的活动而告终,很难在其他活动中共享业务逻辑。

我来找出我错过了一些关键的拼图。 Android是MVC。 然而,它与View相当。

  1. 活动==控制器
  2. 模型==应用程序的子类
  3. 任何从View == View的子类

有趣的是,你可以创build一个Application的子类,并在你的Manifest文件中声明这个子类,Android将创build这个对象的一个​​实例,这个实例的长度与你的应用程序的长度无关,不pipe什么Activity被销毁或创build。 这意味着你可以build立一个所有活动都可以访问的集中式数据模型。

我看到这种方式就像一个原始的Spring容器,你可以初始化对象并解决它们之间的依赖关系。 这样,您可以将应用程序的模型部分从“活动”本身分离出来。 只需让Activity在模型上调用,然后手动callback来接收结果,以便更新UI。

Android的问题在于它将控制器和视图混合在一起。 例如,像TabActivity,ListActivity这样的子类意味着使用某个视图。 所以交换一个视图是相当复杂的。 此外,即使您使用“活动”,Controller也会对视图进行非常具体的假设。 他包含对TextView等UI对象的直接引用,并注册了低级别事件,如点击,键盘等。

如果Activity可以注册更多的高级事件,比如“login”,“更新账户余额”等,视图将响应一系列的点击,键盘,触摸事件而发送,这样会更好。 这样,控制器可以在您可能描述的function而不是devisefunction的层面上工作。

我想我们最终会达到这种devise,因为我们更好地理解提出更好的工具和技术。 看起来Android可能具有可扩展性,但是社区需要绘制它。

Android中的动作,视图和活动是与Android UI一起工作的,并且是模型 – 视图 – 视图模型的实现,其在结构上与模型视图控制器相似(在同一族中)。

据我所知,没有办法摆脱这种模式。 它可能可以完成,但是您可能会失去现有模型的所有优点,并且必须重写自己的UI层以使其工作。

你可以在下面findMVC:

  • 您可以通过分辨率/硬件等在各种XML文件中定义您的用户界面 。
  • 您可以通过语言环境等在各种XML文件中定义您的资源
  • 您可以将数据存储在SQLite中或您的自定义数据存储在/ assets /文件夹中,详细了解资源和资产
  • 你扩展类如ListActivity , TabActivity和使用的inflaters的XML文件
  • 您可以根据自己的模型创build任意数量的类,并拥有自己的包,这将作为一个结构
  • 很多Utils已经为你写了。 DatabaseUtils,Html,

没有单一的MVC模式,你可以服从。 MVC只是说或多或less地说,你不应该混合数据和视图,以便例如视图负责保存正在处理数据的数据或类直接影响视图。

但是,Android处理类和资源的方式,有时甚至被迫遵循MVC模式。 在我看来,更为复杂的是有时候为了观点而负责的活动,但同时又是一个控制者。

如果你在xml文件中定义你的视图和布局,从res文件夹中加载你的资源,如果你或多或less地将这些东西混合在你的代码中,那么你无论如何都会遵循一个MVC模式。

Android开发主要是GUI的开发,像Swing / AWT在Java中由许多对GUI事件作出反应的匿名内部类组成。 其中的一件事让我摆脱了与Swing做了很多的事情……但是我有一个Android手机,所以我会咬紧牙关,然后克服它,就像许多苹果的粉丝所说的那样关于天线问题。 ;)

Android做出了使Controller和View成为一个类的典型决定。 这鼓励把太多的东西放在同一个地方。 一个Activity对应一个屏幕,每个View对应一个屏幕的区域(有时是整个屏幕),每个Controller对应用户来自该屏幕区域的手势,而Models只是Models,有时由来自Environment或其他某些服务的后台疯狂的一套实用function。 我使用Activity来协调一个或多个MVC三重奏。 这有助于处理Android的select,只是把所有东西放在同一个地方。

我可以在不运行模拟器的情况下testing绝大多数Android应用程序。 大赢。

对不起我的英语不好。

Android具有非常好的模块化(活动,片段,视图,服务等)。 所以在MVC中没有必要。

当然,还有input(Activities,Fragments),逻辑,视图(xml或java)和数据(数据库,文件,首选项)的分离。 但是这不是MVC。 你不应该尝试使用MVC,它只会使你的架构复杂化。

Android并没有把东西放在全局范围内,而是激励你尽可能在对象范围(类成员,局部variables)中保留对象,并使用Intents / Bundles将对象传递给活动或传递给片段。 这也是由于内存限制。

如果前台活动需要更多资源,系统可能会损坏您的活动,因此系统必须closures后台进程才能恢复内存。

所以将非常量(可变)对象存储为全局(静态)对象是不安全的。 通常你使用static的不可变常量。

简单来说,你将你的应用程序分离成屏幕(Activities)。 然后,每个屏幕 – 成片段(碎片)。 要在屏幕上执行一系列操作,您还可以使用片段( 示例 )将它们分开。

所以你的应用程序中有很小的块,每个块都可以很容易地testing和重用。

我的印象是android编程模型与MS WPF有很多相似之处。 XML布局定义,总是绑定到这些定义之一的代码…所以,如果你问关于devise模式,因为你想改善当前或在开发android项目,也许你应该看看WPF的做法和模式,以改善架构,就像MVVM一样。

看看这些链接:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

有小项目已经在尝试类似的东西:

http://code.google.com/p/android-binding/

干杯