是否有可能实现的Android使用Java模型 - 视图 - 控制器模式?
还是已经通过开展的活动? 或者是有实现的Android MVC模式更好的办法?
是否有可能实现的Android使用Java模型 - 视图 - 控制器模式?
还是已经通过开展的活动? 或者是有实现的Android MVC模式更好的办法?
在Android中你没有MVC,但你有以下几点:
没有全局唯一的MVC模式。 MVC是一个概念,而不是一个坚实的编程框架。 您可以在任何平台上实现自己的MVC。 只要你坚持,要实现MVC以下基本思路:
想想也是这样说:当你编程模型,该模型应该不需要担心渲染(或平台特定的代码)。 该模型会说的观点,我不在乎,如果你的渲染是Android或iOS或Windows Phone,这是我需要你呈现。 视图只会处理特定于平台的渲染代码。
当您使用此功能特别有用单声道共享模型,以开发跨平台应用。
Android上的操作,视图和活动与Android UI工作的烘焙中的方式,并且是模型-视图-模型(MVVM)模式 ,其在结构上类似于的实现(在同一家庭)模型-视图-controller。
据我所知,是没有办法来打破这种模式。 大概可以做,但你可能会失去所有的利益,现有的模型,并不得不重写自己的UI层,使其工作。
经过一番搜索,最合理的答案如下:
MVC的是Android已经实现:
Button
源自android.view.View
。 (这由方式意味着活性没有应用程序域的逻辑。)
对于小开发商最合理的事情就是按照这种模式,而不是尝试做谷歌决定不这样做。
PS注意,活性有时重新启动,所以它是模型数据没有地方(导致重启是省略最简单的方法android:configChanges="keyboardHidden|orientation"
从XML和打开您的设备)。
编辑
我们可能会谈论MVC,但它会这么说FMVC, 框架-模型-视图-控制器 。 框架 (Android操作系统)规定其组件的生命周期和相关事件的想法,并在实践中的控制器 ( Activity
/ Service
/ BroadcastReceiver
),首先是负责为这些框架应对-imposed事件(如的onCreate()) 。 应的用户输入来单独处理? 即使它应该,你不能分开它,用户输入事件也来自Android系统。
总之,更少的代码是不特定的Android,你把你Activity
/ Service
/ BroadcastReceiver
,就更好了。
还有,你可以服从没有一个单一的MVC模式。 MVC只是规定或多或少,你不应该混在一起的数据和观点,从而使得例如观点负责保存数据或正在处理的数据都直接影响到视图类。
但尽管如此,与类和资源的方式Android的交易中,你有时甚至被迫遵循MVC模式。 更复杂在我看来是有时负责视图的活动,但尽管如此,作为在同一时间的控制器。
如果您在XML文件中定义你的意见和布局,从res文件夹加载资源,如果你避免或多或少地在你的代码混合这些东西,那么你无论如何以下的MVC模式。
您可以在Android中实现MVC,但它不是“原生支持”,并采取了一些努力。
这就是说,我个人倾向于朝着MVP作为Android开发更清洁的架构模式。 并说MVP我的意思是这样的:
我也贴出了更详细的解答这里 。
用各种方法在Android的MVC / MVP实现播放后,我想出了一个合理的架构模式,这是我在这个职位描述: 在Android的MVP和MVC架构模式 。
我发现在Android上导入MVC的最佳资源是这篇文章 :
我跟着我的项目之一相同的设计,和它的工作很大。 我在Android初学者,所以我不能说这是最好的解决办法。
我做了一个修改:我实例化的应用类中的每个活动的模型和控制器,使这些没有重新风景肖像模式发生变化时。
我同意JDPeckham,我相信单靠XML不足以实现应用程序的UI部分。
但是,如果考虑到活动作为视图的一部分,那么实现MVC是非常简单的。 你可以重写应用程序 (如在活动返回由getApplication()),它是在这里,你可以创建一个控制器存活您的应用程序的生命周期。
(或者你可以使用Singleton模式的应用程序文件的建议)
利用布局,资源,活动和意图的Android UI的创建是MVC模式的实现。 请参阅以下链接了解更多关于这个- http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf
镜为PDF格式
MVC-架构在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:代码分离是非常重要的。 在体系结构的每个组件不应该具有依赖逻辑是独立的。 如果碰巧,如果你有一些相关的逻辑,那么在写之间的映射逻辑类。 这将帮助你在未来。
Android的MVC模式是与他们实现的(那种-的) 适配器类。 他们更换控制器与“适配器”。 该适配器状态的描述:
适配器对象作为一个AdapterView和该视图的基础数据之间的桥梁。
我只是在寻找到这一个Android应用程序从数据库中读取,所以我不知道它有多好作品呢。 然而,这似乎有点像Qt的模型 - 视图 - 代表建筑,他们声称是从传统的MVC模式的一个步骤。 至少在PC上,Qt的模式运作得相当好。
虽然这篇文章似乎是老了,我想补充以下两个通知在这一领域为Android最近的发展:
机器人结合 -提供了一个框架,enabes机器人视图窗口小部件的结合到数据模型。 它有助于实现Android应用MVC或MVVM模式。
roboguice - RoboGuice采取的猜测发展。 注入你的浏览,资源,系统服务,或任何其他对象,并让RoboGuice采取的细节。
描述:
MVC模式本质上是这样的:
MVC的重要特点: 我们可以修改的型号或视图或控制器仍然不影响其他的人
我认为最有用的简单解释是在这里: http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf
从一切我已经看到和读到这里,实现所有这些事情使得它更难,不适合以及与Android的其他部分。
有一个活动实现其他听众已经是标准的Android方式。 最无害的方法是添加Java观察员像幻灯片描述和组的onClick和其他类型的行动纳入仍处于活动功能。
Android的方式是活动是否两者。 格斗它并没有真正使延长或做未来的编码变得更容易。
我同意第二个岗位 。 这有点已经实施,只是没有人习惯的方式。 无论是在同一个文件或没有,有的已经分离。 有没有必要建立额外的分离,使其适合其他语言和操作系统。
由于劳累在Android上MVX灾难我最近由提供单向数据流,它类似于MVC的概念,一个小小的图书馆: https://github.com/zserge/anvil
基本上,你有一个组件(活动,片段和ViewGroup中)。 在里面你定义视图层的结构和风格。 也可以定义数据应如何结合各方面的意见。 最后,你可以绑定在同一个地方的听众。
然后,一旦你的数据被改变 - 全球“渲染()”方法将被调用,你的观点将与最新的数据被巧妙地更新。
这里的内部的具有成分家居代码紧凑的(当然模型和控制器的可以容易地分离)的一个例子。 这里的“计数”是一个模型,视图()方法是一个视图,和“V - >计数++”是监听按钮点击和更新模型的控制器。
public MyView extends RenderableView {
public MyView(Context c) {
super(c);
}
private int count = 0;
public void view() {
frameLayout(() -> { // Define your view hierarchy
size(FILL, WRAP);
button(() -> {
textColor(Color.RED); // Define view style
text("Clicked " + count); // Bind data
onClick(v -> count++); // Bind listeners
});
});
}
与分离模型和控制器它会是什么样子:
button(() -> {
textColor(Color.RED);
text("Clicked " + mModel.getClickCount());
onClick(mController::onButtonClicked);
});
这里每个按钮上点击数量将增加,然后在“渲染()”将被调用,并且按钮上的文字将被更新。
:如果您使用科特林语法变得更加愉快http://zserge.com/blog/anvil-kotlin.html 。 此外,还有对Java的替代语法,而不lambda表达式。
库本身非常轻,没有依赖性,不使用反射等
(免责声明:我这个库的作者)
这是令人惊讶地看到,没有一个职位在这里回答了这个问题。 它们要么过于笼统,含糊,不正确或不解决机器人的实现。
在MVC中, 视图层只知道如何显示的用户界面(UI)。 如果需要这方面的任何数据,它得到它从模型层。 但视图不直接问机型以查找数据,它是通过控制器 。 因此控制器调用模型的视图提供所需的数据。 一旦数据准备好时, 控制器通知认为 ,该数据已准备好从模型中获得的。 现在视图可以从模型中的数据。
该流程可以概括如下:
值得一提的是, 视图可以知道无论是通过控制器在模型中的数据的可用性-也被称为被动MVC -或者通过注册观测到它,这是主动MVC观察模型中的数据。
在实现部分,那想到的第一件事是什么Android的组件应该被用于查看 ? Activity
或Fragment
?
答案是,它并不重要,两者都可以使用。 该视图应该能够呈现设备上的用户界面(UI),并在用户与UI交互作出响应。 两个Activity
和Fragment
提供这种所需的方法。
在所使用的示例应用本文我已经使用Activity
为View层,但是Fragment
也可以使用。
完整的示例应用程序可以在我的GitHub库的“MVC”分支中找到这里 。
我也通过一个例子来处理的优点和android的MVC架构的缺点在这里 。
对于那些有兴趣,我已经开始了一系列的Android应用程序架构的文章在这里通过一个完整的工作程序中,我比较了不同的架构,即MVC,MVP,MVVM,为Android应用开发。
没有一个实施MVC架构,但一组库/实例的存在是为了执行一个MVP(模型 - 视图 - 演示者)架构。
请查看以下链接:
https://github.com/sockeqwe/mosby
https://github.com/android10/Android-CleanArchitecture
https://github.com/antoniolg/androidmvp
加入谷歌在Android架构MVP的例子:
据解释是,Xamarin团队解释(在iOS MVC“我知道这似乎不可思议,但等待一秒钟”):
我可以这样说:
Android上的模型仅仅是parcelable对象。 该视图是XML布局,并且所述控制器是(活性+其片段)。
*这只是我的意见,而不是从任何资源或一本书。
我已经看到了是说很多人MVC是Android已经实现,但事实并非如此。 以下的Android默认情况下没有MVC。
因为我没有谷歌永远不会强制征收的MVC实现类似iPhone的限制,但其高达其格局研究或者他们希望在他们的项目的技术,在小型或简单的应用中使用MVC的不是必需的,但开发商的应用成长和变得复杂,并需要修改其在以后的几年代码的,那么总会有这种需要在Android的MVC模式。
它提供了一种简单的方法来修改代码,同时也有助于降低的问题。 如果你想在Android上导入MVC,然后按照下面这个给定链路,享受你的项目的MVC实现。
http://www.therealjoshua.com/2011/11/android-architecture-part-1-intro/
但现在我认为采用Android架构模式以及MVP就是最好的选择开发商应一个干净和强大的Android应用程序使用一个。
当我们运用MVC, MVVM ,或演示模型 ,以一个Android应用程序,我们真正想要的是有一个清晰的结构化项目和单元测试更重要的是容易。
目前,没有一个第三方的框架,你平时有很多的代码(如addXXListener(),findViewById()等),不添加任何商业价值。
更重要的是,你必须运行Android单元测试,而不是正常的JUnit测试,这需要年龄运行,使单元测试有点不切实际。 由于这些原因,几年前我们就开始一个开源项目, RoboBinding -数据绑定演示模型框架为Android平台。
RoboBinding帮助您编写UI代码更容易阅读,测试和维护。 RoboBinding删除的像addXXListener左右不必要的代码的需要,并转移UI逻辑来呈现模型,这是一个POJO并且能够经由正常JUnit测试进行测试。 RoboBinding本身自带300次多JUnit测试,以保证其质量。