MVC模式,没有数据库,在哪里存储对象?

时间:2015-03-26 10:14:24

标签: java model-view-controller grasp

我正在开展一个学校项目,或者任务是设计一个项目管理工具。我们可以使用任何设计模式,只要我们可以根据GRASP原则解释它的好处。

我将概述项目工具:

  • 项目的CRUD功能
  • 任务的CRUD功能(项目有任务)
  • 用户的CRUD功能(用户被分配到任务)
  • 一个简单的GUI

我们决定采用MVC模式,不允许使用数据库。我的问题是:我应该在哪里存储对象?

我应该在控制器中执行此操作吗?目前我们这样做:

public class ProjectController
{
    private ArrayList<Project> projects;

    public ProjectController(TaskController taskController)
    {
        projects = new ArrayList<Project>();
    }
}

我觉得将对象保留在控制器中有问题,但我无法解释原因。任何能够根据GRASP原则解释什么是最佳实践的人?

修改 谢谢你,从大家那里学到了一些东西,但只能选择一个答案。

4 个答案:

答案 0 :(得分:2)

增加抽象..创建模型类。在那里创建你的arraylist(模型对象)。您的控制器仍应访问/调用模型方法。

明天,您可能希望将这些数据转储到文件或数据库中,使用当前设计,您将有一个难得的机会。因此,将模型与控制器分开,保持设计清洁。

答案 1 :(得分:2)

答案非常简短:不,不要把你的商店放在控制器里。这是一个坏主意,它违背了MVC原则。

通常情况下,模型是唯一负责数据的地方但是M部分经常被拆分为:

  • 获取数据。
  • 将数据存储在应用程序中。

有趣的是,没有人关心你的数据来自哪里。数据库,文件,API休息。无论如何,这都不重要。

我并不是说我有最适合你的解决方案,但是你可以通过一个例子来解决这个问题。

  • 您将用户数据存储到文件中。
  • 您创建了一个用于获取用户数据文件的php类UserDataRepository,并将数据设置为UserModel类。
  • 在控制器中,您致电UserDataReposiroty并取回UserModel

这样你的控制器就不知道你是如何获取数据的。他只是要求存储库获取它们并返回允许控制器操作的UserModel。

我希望这会对你有所帮助

答案 2 :(得分:1)

没有。如果您将数据存储在控制器中,那么您不使用MVC。你必须在模型中做到这一点。您可以存储在内存或文件中,但始终存储数据抛出模型。例如,您可以实现DAO模式来操作数据。

也许,不是现在,但是你需要一个数据库。使用DAO模式,将当前的持久性类型调整为数据库并不困难。

答案 3 :(得分:0)

在MVC模式中,M表示模型,V表示视图,C表示控制器。一个常见的MVC应用程序进展是,一旦请求到来,控制器就会获取它并进行必要的处理,检索结果数据,然后将结果数据传递给视图进行渲染。渲染视图层后,它将通过GUI显示给用户。

因此控制器可以被视为一个指挥官,它控制着进程,但是在控制器中处理数据检索并不好。模型应负责检索和组织数据。这意味着数据对象应存储在 Model 而不是 Controller Controller 调用 Model 以检索数据对象即可。以Java应用程序为例,通常需要这些部分:

  1. ProjectController,它调用ProjectService.getAllProjects()方法来检索结果。检索后,视图层使用结果呈现GUI以供显示。我建议Controller层应该很薄。
  2. ProjectService,它有方法getAllProjects(),此方法调用ProjectDAO.getAllProjects()方法来检索项目数据,也许还有其他处理方法。业务逻辑就在这里。
  3. ProjectDAO,它有几种方法可以处理Project个对象,处理这一层的数据!但是这些方法应该与业务逻辑独立(因为业务逻辑应该在ProjectService)处理。
  4. Project object。
  5. 希望它有所帮助。