MVC模式,没有数据库,对象存放在哪里?
MVC pattern, no database, where to store objects?
我正在做一个学校项目,或者任务是设计一个项目管理工具。我们可以使用任何设计模式,只要我们能根据 GRASP 原则解释它的好处。
我给个项目工具的概要:
- 项目的 CRUD 功能
- 任务的 CRUD 功能(项目有任务)
- 用户的 CRUD 功能(用户分配给任务)
- 一个简单的 GUI
我们决定采用 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
应用为例,通常需要这些部分:
ProjectController
,调用ProjectService.getAllProjects()
方法获取结果。检索后,视图层使用结果渲染 GUI 以供显示。我建议Controller层应该很薄。
ProjectService
,它有方法getAllProjects()
,这个方法调用ProjectDAO.getAllProjects()
方法来检索项目数据,可能还有其他处理。业务逻辑在这里。
ProjectDAO
,它有几个处理Project
对象的方法,在这一层处理数据!但是这些方法应该独立于业务逻辑(因为业务逻辑应该在 ProjectService
中处理)。
Project
对象。
希望对您有所帮助。
我正在做一个学校项目,或者任务是设计一个项目管理工具。我们可以使用任何设计模式,只要我们能根据 GRASP 原则解释它的好处。
我给个项目工具的概要:
- 项目的 CRUD 功能
- 任务的 CRUD 功能(项目有任务)
- 用户的 CRUD 功能(用户分配给任务)
- 一个简单的 GUI
我们决定采用 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
应用为例,通常需要这些部分:
ProjectController
,调用ProjectService.getAllProjects()
方法获取结果。检索后,视图层使用结果渲染 GUI 以供显示。我建议Controller层应该很薄。ProjectService
,它有方法getAllProjects()
,这个方法调用ProjectDAO.getAllProjects()
方法来检索项目数据,可能还有其他处理。业务逻辑在这里。ProjectDAO
,它有几个处理Project
对象的方法,在这一层处理数据!但是这些方法应该独立于业务逻辑(因为业务逻辑应该在ProjectService
中处理)。Project
对象。
希望对您有所帮助。