繁体   English   中英

对android项目的结构和MVC模式感到困惑

[英]Confused about structure of android project and MVC pattern

我无法理解如何在android studio项目中应用模型-视图-控制器设计模式。

我知道该视图是.xml布局,并且活动类应该是控制器,但是我对通用编程逻辑是否应该成为控制器或模型的一部分感到困惑。

与特定活动相关的编程逻辑是否可以包含在活动类中,或者应该将它们分为两个类? 也就是说,仅处理用户输入的活动和处理相关编程逻辑的第二类。

根据职责隔离代码始终是一个好主意。 在代码的可读性和可维护性方面,它给我们带来了许多优势。

既然您已经要求使用MVC模式,但是在这里,我们有一个非常好的MVP模式示例,有关Google项目中有关Android项目中的干净架构的以下示例解释了MVP模式。

链接: https//github.com/googlesamples/android-architecture/blob/todo-mvp/README.md

在此处输入图片说明

组件:

模型:更多的业务实体/ Pojo视图:更多的片段和活动存储库:信息的数据源。 它可以是数据库,缓存,远程服务器,文件系统等之一。Presentor:这是一个从存储库之一获取数据并将结果发送回视图的层。

我试图在我的一个学习项目中实现类似的模式。

链接: https//github.com/amol-kamble/movie-finder/tree/master/app/src/main

你好@Somebloke它就像它的名字一样简单。

  1. Android项目结构是指用于开发Android应用程序的必要文件。 例如src文件,gen文件等。
    • src:此文件夹包含Java源文件
    • gen:生成的Java库,该库仅供Android内部使用。
    • Res:在这里,我们可以存储资源文件,例如图片,用于定义布局的XML文件等。 在此文件夹中,还有其他文件夹,例如Drawable,Layout和Values。
    • AndroidManifest.xml:这是Android定义文件。 它包含有关Android应用程序的信息,例如最低Android版本,访问Android设备功能的权限(例如INTERNET访问权限,使用电话权限的权限等)。

2.MVC:-它是用于开发Android应用程序的结构之一。

  • 模型 -数据层,负责管理业务逻辑和处理网络或数据库API。
  • 视图 -UI层-模型数据的可视化。
  • 控制器 -逻辑层,通知用户行为并根据需要更新模型。 在此处输入图片说明

您可以以此为例https://github.com/hkusu/android-mvc-sample

架构决定可能是:

  • 该应用程序有望在线还是离线运行?
  • 打包应用程序时,应如何在代码库中分发顶级程序包?
  • 依赖注入。
  • 单元测试。

架构是我们管理变更需求中涉及的风险的尝试。 与其他任何风险管理活动一样,我们无法为所有可能发生的风险做好准备。 我们需要选择一个将来可能发生的更改的子集,以优化应用程序,该子集将构成应用程序体系结构。

这是一个入门的知识库,您应该创建自己的项目并实现这些软件体系结构,以便采用适用于您和您的项目的软件体系结构:

Android体系结构蓝图

Android体系结构蓝图

具有MODEL-VIEW-INTENT的反应式应用-第1部分-模型

在此处输入图片说明

 //Student Model Class public class Student { private String rollNo; private String name; public String getRollNo() { return rollNo; } public void setRollNo(String rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } } //Student View Class public class StudentView { private TextView name; private TextView rollNo; public StudentView(View view){ name=(TextView)view.findViewById(R.id.tv_name); rollNo=(TextView)view.findViewById(R.id.tv_roll_no); } public void setStudentDetails(Student studentModel){ name.setText(studentModel.getName()); rollNo.setText(studentModel.getRollNo()); } } //Student Controller Class public class StudentController { private Student model; private StudentView view; public StudentController(Student model, StudentView view){ this.model = model; this.view = view; } public void setStudentName(String name){ model.setName(name); } public String getStudentName(){ return model.getName(); } public void setStudentRollNo(String rollNo){ model.setRollNo(rollNo); } public String getStudentRollNo(){ return model.getRollNo(); } public void updateView(){ view.setStudentDetails(model); } } 

您可以使用上面给出的MVC模式。在活动中创建所有三个类的对象,并将活动的view(xml文件)引用传递给StudentView对象。在xml文件中提到的StudentView类中创建子视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM