问题:非常庞大且复杂的 Activity 类。难以阅读/理解和修改。难以测试。
可能的解决方案:Model-View-Presenter(可能使用依赖注入(inject))。 和模拟测试对象!
我正计划在我的 Android 应用程序中实现模型- View -展示器。 这基本上是模型- View - Controller 的变体。本质上,让 Activity 一个美化的布局管理器,并将任何业务逻辑推迟到 Presenter。另一种看待 Presenter 的方式是,它就像一个在 Activity 中实例化的 Helper 类,通过 Activity 提供 Presenter 可以使用的接口(interface)/回调来完成繁重的工作。
我想听听社区对此的一些想法。例如:
这意味着什么接口(interface)?
Model 和 View 与 Presenter 有什么责任。
对于 Presenter 我想 Activity 会实现 Presenter 需要的接口(interface)?
Presenter 与 Activity 应该包含哪些类型的内容?
演示者会与 Activity 一对一吗?具有多个 fragment 的 Activity 显示不同的小部件,每个小部件都有自己的适配器怎么样?我们现在需要多个演示者还是只需要一个?
Presenter 与 Adapter 有何区别?
Presenter 应该如何将 Activity 与 ListView 和 ListViewAdapter 联系起来?
Presenter 与 Adapter 有什么区别?
演示者应该选择要使用的适配器吗?或者 Activity 应该做出这个决定吗?
Presenter 应该处理模型数据还是适配器?适配器和演示器之间是否存在冲突?适配器是演示器吗?或更少/更多。通常 Adapters 仅适用于 Activity 中的 ListViews 等小部件。我认为他们不会进行获取数据本身的调用。
所以在 model-view-presenter 中,关键的事情实际上是决定在 presenter 和其他类中发生什么,以及在 presenter 和 Activity 、适配器和 View /包括 fragment 之间应该进行什么通信。
Model-View-Presenter 对于 Android 来说真的不是一个好主意吗?或者它是否适合 Android 框架?
请记住,在 Android 之外有许多非常成熟的 SDK 示例仍然需要像 MVP 这样的微架构。事实上例子比比皆是:例如。 Flex 是非常成熟的 Flash SDK,但它仍然需要适用于几乎所有主要应用程序的 MVP 和 MVC 框架。
EJB 需要 Spring 来简化和组织它。 MFC/Struts 等,这个列表还在继续。为什么 Android 应该有所不同?为什么我们要假设 SDK 具备 Android 所需的一切,而没有像 MVP 这样的设计模式?
很高兴知道,在我为此花费数百小时之前,请随时对此问题的任何部分发表评论/回答。
最佳答案
Android 对糟糕的 MV(P|C) 设计的惩罚比我遇到的任何平台都多。忘掉它提供的用于在 Activity 堆栈上下传递状态的笨拙方法吧。尽可能多地从您的 Activity 中获取状态和逻辑。视情况将其移动到 Services、ContentProviders 和 SharedPreferences 中。尽量使您的 Activity 纯 View 。 IMO,服务在 Android 教程中从未得到足够的重视。即使是 O'Reilly Programming Android 一书也只给了他们四分之一的页面!
谨慎扩展应用程序。如果您曾经在其自己的进程中启动服务(例如,允许它在 Activity 崩溃时正常关闭),那么该服务将拥有自己的应用程序副本。
关于android - Model-View-Presenter 和 Android 应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291316/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr