有可能在Java中为Android实现模型-视图-控制器模式吗?
或者它已经通过活动实现了吗?或者有没有更好的方法来实现Android的MVC模式?
有可能在Java中为Android实现模型-视图-控制器模式吗?
或者它已经通过活动实现了吗?或者有没有更好的方法来实现Android的MVC模式?
当前回答
我发现在Android上实现MVC最好的资源是这篇文章:
我在自己的一个项目中采用了同样的设计,效果非常好。我是Android的初学者,所以我不能说这是最好的解决方案。
我做了一个修改:我实例化了应用程序类中每个活动的模型和控制器,这样当横向-纵向模式更改时就不会重新创建这些模型和控制器。
其他回答
没有普遍唯一的MVC模式。MVC是一个概念,而不是一个可靠的编程框架。你可以在任何平台上实现你自己的MVC。只要你坚持以下基本思想,你就是在实现MVC:
模型:渲染什么 视图:如何渲染 控制器:事件,用户输入
也可以这样考虑:当您为模型编程时,模型不应该担心呈现(或特定于平台的代码)。模型会对视图说,我不在乎你的渲染是Android, iOS还是Windows Phone,这是我需要你渲染的。 视图将只处理特定于平台的呈现代码。
当您使用Mono共享模型以开发跨平台应用程序时,这一点特别有用。
当我们将MVC、MVVM或Presentation Model应用到Android应用中时,我们真正想要的是有一个清晰的结构化项目,更重要的是更容易进行单元测试。
目前,如果没有第三方框架,通常会有大量代码(如addXXListener()、findViewById()等),这不会增加任何业务价值。
更重要的是,你必须运行Android单元测试,而不是正常的JUnit测试,后者需要很长时间才能运行,并且使单元测试有些不切实际。基于这些原因,几年前我们开始了一个开源项目RoboBinding——一个用于Android平台的数据绑定表示模型框架。
RoboBinding帮助您编写更易于阅读、测试和维护的UI代码。RoboBinding消除了对addXXListener等不必要代码的需求,并将UI逻辑转移到表示模型(Presentation Model),这是一个POJO,可以通过正常的JUnit测试进行测试。RoboBinding本身带有300多个JUnit测试,以确保其质量。
我发现在Android上实现MVC最好的资源是这篇文章:
我在自己的一个项目中采用了同样的设计,效果非常好。我是Android的初学者,所以我不能说这是最好的解决方案。
我做了一个修改:我实例化了应用程序类中每个活动的模型和控制器,这样当横向-纵向模式更改时就不会重新创建这些模型和控制器。
MVC- Android上的架构 在android中最好遵循任何MVP而不是MVC。但仍然根据问题的答案这是可以解的
描述及指引
Controller -
Activity can play the role.
Use an application class to write the
global methods and define, and avoid
static variables in the controller label
Model -
Entity like - user, Product, and Customer class.
View -
XML layout files.
ViewModel -
Class with like CartItem and owner
models with multiple class properties
Service -
DataService- All the tables which have logic
to get the data to bind the models - UserTable,
CustomerTable
NetworkService - Service logic binds the
logic with network call - Login Service
Helpers -
StringHelper, ValidationHelper static
methods for helping format and validation code.
SharedView - fragmets or shared views from the code
can be separated here
AppConstant -
Use the Values folder XML files
for constant app level
注1:
这是你可以施展的魔法。在对代码段进行分类之后,编写一个基本接口类,比如IEntity和IService。声明通用方法。现在创建抽象类BaseService,声明您自己的方法集,并分离代码。
注2:如果您的活动呈现多个模型,那么与其在活动中编写代码/逻辑,不如将视图划分为片段。那就好多了。因此,如果将来需要在视图中显示更多的模型,请再添加一个片段。
注3:代码分离是非常重要的。体系结构中的每个组件都应该是独立的,而不是相互依赖的逻辑。如果碰巧你有一些相关的逻辑,那么在两者之间写一个映射逻辑类。这对你将来会有帮助。
我认为最有用的简单解释是: http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf
从我在这里看到和读到的所有东西来看,实现所有这些东西都变得更加困难,并且与android的其他部分不太适应。
让一个活动实现其他监听器已经是标准的Android方式。最无害的方法是像幻灯片所描述的那样添加Java观察者,并将onClick和其他类型的操作分组到仍然在Activity中的函数中。
Android的方式是Activity两者都做。与之斗争并不能真正使扩展或将来的编码变得更容易。
我同意第二篇文章。它已经实现了,只是不是人们习惯的方式。不管它是否在同一个文件中,已经有分离了。不需要创建额外的分隔来适应其他语言和操作系统。