我有一个关于mvc应用程序中的数据库访问的问题.我的数据库访问逻辑应该放在哪里?
它应该放在每个模型中吗? (如果我有人模型)
Person p = new Person(); p.save();
它应该放在每个控制器中吗?
或者我应该创建一组不同的类来执行数据库逻辑,这意味着除了模型,视图和控制器之外我还有一个额外的层?
这是怎么做到的?
如果使用ORM怎么办?
解决方法
在MVC模式中,M表示模型,V表示视图,C表示控制器.一个常见的MVC应用程序进展是,一旦请求到来,控制器就会获取它并进行必要的处理,检索结果数据,然后将结果数据传递给视图进行渲染.渲染视图层后,它通过GUI显示给用户.
控制器可以看作是指挥官,它控制着进程,但是在控制器中处理数据检索并不好.模型应负责检索和组织数据.这意味着数据对象应存储在Model而不是Controller中,Controller调用Model来检索数据对象.
对于您的情况,我的建议是它需要以下组件:
> PersonController,它调用PersonService.savePerson(Person person)方法来保存数据(或者在其他情况下它检索结果).我建议Controller层应该很薄.
> PersonService,它有方法savePerson(Person person),这个方法调用PersonDAO.savePerson(Person person)方法来保存/检索项目数据(这里保存数据),也许还有其他处理方法.业务逻辑在这里.
> PersonDAO,它有几种处理Person对象的方法(如savePerson(Person person),getAllPersons()),在这一层处理数据库.但是这些方法应该与业务逻辑独立(因为业务逻辑应该在PersonService中处理).
> Person对象,它是value object,它只是用get / set方法定义Person应具有的属性,如名称,年龄等,用于通过不同的层传递数据.它根本不涉及数据库.
对于非复杂的应用程序,服务层不是非常必要的,可以集成到Controller层,这意味着只需PersonController即可.