【问题标题】:Converting Java code to model view controller architecture pattern [closed]将 Java 代码转换为模型视图控制器架构模式 [关闭]
【发布时间】:2015-03-29 02:38:44
【问题描述】:

我已经在 java 中编写了一些代码来给出一些数字 1 到 10,然后还显示平均值。我想将其更改为模型视图控制器方法(这就是导师想要的)。我们只上了一节课,我真的不明白如何改变它。如果有人可以通过这个并向我展示如何(好像他们试图教一个 5 岁的孩子),那就太好了。

//JAVA CODE
public class Ex4 {

    public static void main(String[] args) {
        int sum = 0;
        int average = 0;
        for (int i=1; i < 10; i++){

            sum = sum + i;
            average = sum/i;

        }
        System.out.println("The sum is " + sum);
        System.out.println("The average is " + average);

    }    
}

【问题讨论】:

  • 您确实意识到整数的平均值可能不是整数,对吧?

标签: java view model controller software-design


【解决方案1】:

MVC 是一种基本模式,您可以将模型(数据)、视图(显示)和控制器(逻辑)分离到不同的文件和目录中。

这是该模型的说明:

以下是您当前代码的外观示例:

控制器类(包含 main 方法):

public class Ex4Controller {
    //You could create a second controller, 
    //and put the main method there, 
    //then create a controller object. 
    public static void main(String[] args) {
        
        //Initialize model
        Ex4Model number = new Ex4Model(0,0.0);

        //Execute business logic 
        Ex4Controller.getSumAndAverage(number); 

        //Set view
        Ex4View.printSum(number.sum, number.average);
    }
    
    //Logic method
    private static void getSumAndAverage(Ex4Model numbers){
        
        for (int i=1; i < 10; i++){
            //Here the controller interfaces with 
            //the model
            numbers.sum = numbers.sum + i;
            numbers.average = numbers.sum/i;

        }
    }

}

控制器类与modelview 接口。此类是您执行所有流程并更新模型或视图的地方。任何逻辑完成,都将在这个类中完成。如果您想获得数字的平均值,您可以在此类中编写一个名为getmean() 的方法。数据操作仅在此处完成。

这是模型类:

public class Ex4Model {

    public int sum = 0;
    public double average = 0;
    
    //Custom constructor to set values
    public Ex4Model(int sum, double average){
        this.sum = sum;
        this.average = average; 
    }

}

这个类用于保存数据。这里没有逻辑。这是用于存放数据的基本数据结构。此类不与视图交互。

这是你的视图类:

public class Ex4View {

    public static void printSum(int sum, double average){
         System.out.println("The sum is " + sum);
           System.out.println("The average is " + average);
    }
}

这不是一个真实的观点,但考虑到情况,这是最好的演示。使用Java,您可以将swing 文件放在这里。这些文件的工作是显示数据。您会注意到控制器将所有数据传递给此类,而不是从模型中访问数据。

这将输出到控制台:

总和是 45

平均为 5.0

使用 MVC 时要记住的一点是,您可以拥有多个控制器、模型和视图。这是一个非常简单的例子。通过使用 MVC,开发人员和程序员能够更好地组织数据。他们知道一切都在哪里完成,而不是让视图在某些区域操作数据,而不是在其他区域。

我希望这是有道理的。

【讨论】:

    【解决方案2】:

    作为(非常)粗略的指导方针:

    模型:存储数据。在这种情况下,总和和平均值。

    查看:显示数据。在这种情况下,使用System.out 写出数据。当模型改变时,更新显示(写出新值)。

    控制器:操作数据。在这种情况下,获取一个整数数组,计算总和和平均值,并将结果提供给模型。

    总体而言,Controller 计算总和和平均值,然后将这些值提供给 Model。视图通知模型更改。视图显示模型的值。

    【讨论】:

    • 这个我明白,但我该怎么写呢?
    • 首先,创建三个类。模型、视图和控制器。然后取Ex4中的代码,确定每一行应该进入哪个类。
    【解决方案3】:

    创建 3 个类:

    假设Ex4Model,其中只有两个成员变量sumaverage,以及每个对应的getset 方法。这将保存您的数据。

    然后我们可以创建视图,比如说Ex4View,它有一个称为render(Ex4Model model) 的方法,它从模型中输出你想要的东西,在你的例子中是sumaverage

    然后你可以创建控制器Ex4Controller,它有一个方法calculate()。它在其中执行计算并将它们提供给模型(在这个简单的示例中,您可以创建它的新实例),然后在视图上调用render()

    剩下的就由你们一起来吧,这是你们的功课。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2013-12-06
      • 1970-01-01
      • 2015-01-06
      相关资源
      最近更新 更多