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

MVC pattern, no database, where to store objects?

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

我给个项目工具的概要:

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

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

public class ProjectController
{
    private ArrayList<Project> projects;

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

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

编辑: 谢谢,向大家学习了,只能挑一个回答。

增加抽象.. 创建一个模型class。在那里创建您的数组列表(模型对象)。您的控制器仍应 access/call 模型方法。

明天,您可能想将该数据转储到文件或数据库中,使用当前的设计,您将很难完成这项工作。因此,请将您的 模型 与您的控制器分开,并保持设计整洁。

没有。如果您将数据存储在控制器中,那么您就没有使用 MVC。您必须在模型中执行此操作。您可以存储在内存或文件中,但始终将数据存储在模型中。例如,您可以实现 DAO 模式来操作数据。

也许,现在不行,但到时候您将需要一个数据库。使用 DAO 模式,将您当前的持久性类型适应数据库并不困难。

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

通常,模型是唯一负责你的数据的地方,但 M 部分经常被分成:

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

有趣的是,没有人关心你的数据来自哪里。一个数据库,一个文件,一个API休息。随便吧,没关系。

我并不是说我有最适合你的解决方案,但这里是你如何通过一个例子来做到这一点。

  • 您将用户数据存储到一个文件中。
  • 您创建一个 php class UserDataRepository 来获取用户数据文件,并将数据设置到您的 UserModel class.
  • 从控制器,您调用您的 UserDataReposiroty 并取回您的 UserModel

这样你的控制器就不知道你是如何获取数据的。他只是请求一个存储库来获取它们,它 returns 允许控制器操作的 UserModel。

希望对您有所帮助

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

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

  1. ProjectController,调用ProjectService.getAllProjects()方法获取结果。检索后,视图层使用结果渲染 GUI 以供显示。我建议Controller层应该很薄。
  2. ProjectService,它有方法getAllProjects(),这个方法调用ProjectDAO.getAllProjects()方法来检索项目数据,可能还有其他处理。业务逻辑在这里。
  3. ProjectDAO,它有几个处理Project对象的方法,在这一层处理数据!但是这些方法应该独立于业务逻辑(因为业务逻辑应该在 ProjectService 中处理)。
  4. Project 对象。

希望对您有所帮助。