我在MVC设计中访问数据库的哪一层

欲望PRG

我对MVC应用程序中的数据库访问有疑问。我的数据库访问逻辑应该放在哪里?

是否应将其放置在每个模型中?(如果我有一个人物模型)

Person p = new Person();
p.save();

是否应将其放置在每个控制器中?还是应该仅创建一组不同的类来执行数据库逻辑,这意味着除了模型,视图和控制器之外,我还有一个额外的层?

怎么做?另外,如果使用ORM,该怎么办?

编码器

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

控制器可以看作是一个指挥官,它控制着过程,但是在控制器中处理数据检索并不好。模型应负责检索和组织数据。这意味着数据对象应该存储在Model中而不是Controller中,Controller调用Model来检索数据对象。

对于您的情况,我的建议是它需要以下组件:

  1. PersonController,它调用PersonService.savePerson(Person person)方法保存数据(或在其他情况下检索结果)。我建议控制器层应该很薄。
  2. PersonService,它具有方法savePerson(Person person),此方法调用PersonDAO.savePerson(Person person)方法来保存/检索项目数据(此处保存数据),并可能进行其他处理。这里是业务逻辑。
  3. PersonDAO,它有几种方法可以处理Person对象(如savePerson(Person person)getAllPersons()),在这一层中处理数据库。但是这些方法应该与业务逻辑无关(因为应该处理业务逻辑PersonService)。
  4. Person对象,它是值对象,它只是定义什么属性一个Person应该有,像nameage等等,与get/set方法,用于通过不同的层传送数据。它根本不处理数据库。

对于不复杂的应用程序,服务层不是非常必要,可以集成到控制器层,这意味着可以PersonController

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该在哪一层进行多层MVC日志记录

来自分类Dev

我应该声明哪一层枚举?

来自分类Dev

哪一层负责确保数据完整性

来自分类Dev

数据访问层[C#]中映射数据库的设计模式

来自分类Dev

在Clean Architecture中,UI代码在哪一层?

来自分类Dev

数据库层中异常处理的设计模式

来自分类Dev

KineticJS哪一层单击了?

来自分类Dev

哪一层应包含ICommand?

来自分类Dev

度量收集在哪一层被认为适合领域驱动设计?

来自分类Dev

由于设计不良的业务和数据库层,MVC4中出现极端性能问题

来自分类Dev

为通用数据库模型设计数据访问层

来自分类Dev

具有多个数据库的数据访问层的设计

来自分类Dev

PureMVC中的异步数据库访问层

来自分类Dev

哪一个是 firebase 数据库的有效设计?

来自分类Dev

JavaScript中如何判断JSON请求的哪一层是JSON对象?

来自分类Dev

在MVP设计模式中,谁负责访问数据库

来自分类Dev

数据库访问的抽象层

来自分类Dev

DNS在协议堆栈的哪一层发生?

来自分类Dev

SSL握手发生在哪一层?

来自分类Dev

openflow协议在哪一层起作用?

来自分类Dev

在Web应用程序的哪一层实施RBAC?

来自分类Dev

选择wifi通道的逻辑位于哪一层?

来自分类Dev

哪一层用于更改保存方法?

来自分类Dev

访问数据库理论/设计

来自分类Dev

网站访问数据库设计

来自分类Dev

网站访问数据库设计

来自分类Dev

模型层中的域驱动设计数据库验证

来自分类Dev

SQL数据库父/子我应该自动递增哪一个

来自分类Dev

如何设计Docker路由和数据库层?