1

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

我将给出项目工具的概要:

  • 项目的 CRUD 功能
  • 任务的 CRUD 功能(项目有任务)
  • 用户的 CRUD 功能(将用户分配给任务)
  • 一个简单的图形用户界面

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

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

public class ProjectController
{
    private ArrayList<Project> projects;

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

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

编辑: 谢谢,从大家那里学到了一些东西,但只能选择一个答案。

4

4 回答 4

3

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

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

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

有趣的是,没有人关心你的数据来自哪里。一个数据库,一个文件,一个 API 休息。不管怎样,没关系。

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

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

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

我希望这能帮到您

于 2015-03-26T10:27:46.503 回答
2

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

明天,您可能希望将这些数据转储到文件或数据库中,您将在当前设计中实现这一目标。因此,将您的模型与控制器分开,并保持设计简洁。

于 2015-03-26T10:18:46.193 回答
1

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

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

于 2015-03-26T10:20:47.153 回答
0

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

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

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

希望能帮助到你。

于 2015-03-26T11:12:13.460 回答