我正在开展一个学校项目,或者任务是设计一个项目管理工具。我们可以使用任何设计模式,只要我们可以根据GRASP原则解释它的好处。
我将概述项目工具:
我们决定采用MVC模式,不允许使用数据库。我的问题是:我应该在哪里存储对象?
我应该在控制器中执行此操作吗?目前我们这样做:
public class ProjectController
{
private ArrayList<Project> projects;
public ProjectController(TaskController taskController)
{
projects = new ArrayList<Project>();
}
}
我觉得将对象保留在控制器中有问题,但我无法解释原因。任何能够根据GRASP原则解释什么是最佳实践的人?
修改 谢谢你,从大家那里学到了一些东西,但只能选择一个答案。
答案 0 :(得分:2)
增加抽象..创建模型类。在那里创建你的arraylist(模型对象)。您的控制器仍应访问/调用模型方法。
明天,您可能希望将这些数据转储到文件或数据库中,使用当前设计,您将有一个难得的机会。因此,将模型与控制器分开,保持设计清洁。
答案 1 :(得分:2)
答案非常简短:不,不要把你的商店放在控制器里。这是一个坏主意,它违背了MVC原则。
通常情况下,模型是唯一负责数据的地方但是M部分经常被拆分为:
有趣的是,没有人关心你的数据来自哪里。数据库,文件,API休息。无论如何,这都不重要。
我并不是说我有最适合你的解决方案,但是你可以通过一个例子来解决这个问题。
UserDataRepository
,并将数据设置为UserModel
类。UserDataReposiroty
并取回UserModel
。这样你的控制器就不知道你是如何获取数据的。他只是要求存储库获取它们并返回允许控制器操作的UserModel。
我希望这会对你有所帮助
答案 2 :(得分:1)
没有。如果您将数据存储在控制器中,那么您不使用MVC。你必须在模型中做到这一点。您可以存储在内存或文件中,但始终存储数据抛出模型。例如,您可以实现DAO模式来操作数据。
也许,不是现在,但是你需要一个数据库。使用DAO模式,将当前的持久性类型调整为数据库并不困难。
答案 3 :(得分:0)
在MVC模式中,M表示模型,V表示视图,C表示控制器。一个常见的MVC应用程序进展是,一旦请求到来,控制器就会获取它并进行必要的处理,检索结果数据,然后将结果数据传递给视图进行渲染。渲染视图层后,它将通过GUI显示给用户。
因此控制器可以被视为一个指挥官,它控制着进程,但是在控制器中处理数据检索并不好。模型应负责检索和组织数据。这意味着数据对象应存储在 Model 而不是 Controller , Controller 调用 Model 以检索数据对象即可。以Java
应用程序为例,通常需要这些部分:
ProjectController
,它调用ProjectService.getAllProjects()
方法来检索结果。检索后,视图层使用结果呈现GUI以供显示。我建议Controller层应该很薄。ProjectService
,它有方法getAllProjects()
,此方法调用ProjectDAO.getAllProjects()
方法来检索项目数据,也许还有其他处理方法。业务逻辑就在这里。ProjectDAO
,它有几种方法可以处理Project
个对象,处理这一层的数据!但是这些方法应该与业务逻辑独立(因为业务逻辑应该在ProjectService
)处理。Project
object。希望它有所帮助。