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

时间:2018-08-30 01:09:22

标签: java android design-patterns model-view-controller android-activity

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

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

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

4 个答案:

答案 0 :(得分:2)

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

由于您已经要求使用MVC模式,但是在这里,我们有一个很好的MVP模式示例,有关Google示例中有关Android项目中干净架构的示例链接,下面将对此进行解释。

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

enter image description here

组件:

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

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

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

答案 1 :(得分:2)

你好@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层-来自模型的数据的可视化。
  • 控制器 -逻辑层,通知用户行为并根据需要更新模型。enter image description here

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

答案 2 :(得分:0)

架构决定可能是:

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

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

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

Android Architecture Blueprints

Android Architecture Blueprints

Reactive Apps with MODEL-VIEW-INTENT - PART1 - Model

enter image description here

答案 3 :(得分:0)

//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对象。在StudentView类中创建子视图,如xml文件中所述。