Java MVC体系结构模式

Java MVC体系结构模式,java,ruby-on-rails,ruby,model-view-controller,jpa,Java,Ruby On Rails,Ruby,Model View Controller,Jpa,我做Java和Ruby(以及使用框架)已经有一段时间了,我知道MVC是一种分离代码的方法。问题是,我想我从来没有用过它应该用的方式 第一个问题是:业务逻辑,它意味着什么?业务逻辑是否意味着该应用程序专用的逻辑?假设你正在建造一个卫星系统。业务逻辑是该卫星系统唯一的代码吗 “域”是什么意思?类似于领域逻辑或领域中的术语 “保持您的模型智能、控制器精简和视图静音”。这句话清楚地表明,我加载了太多代码的控制器是错误的编写方式 举个例子。如果您有银行账户类。那么这个类应该为诸如验证等行为以及getter

我做Java和Ruby(以及使用框架)已经有一段时间了,我知道MVC是一种分离代码的方法。问题是,我想我从来没有用过它应该用的方式

第一个问题是:业务逻辑,它意味着什么?业务逻辑是否意味着该应用程序专用的逻辑?假设你正在建造一个卫星系统。业务逻辑是该卫星系统唯一的代码吗

“域”是什么意思?类似于领域逻辑或领域中的术语

“保持您的模型智能、控制器精简和视图静音”。这句话清楚地表明,我加载了太多代码的控制器是错误的编写方式

举个例子。如果您有
银行账户
类。那么这个类应该为诸如验证等行为以及getter/setter提供方法吗

控制器应该做什么?只需将视图中的输入/事件重定向到模型,或者更新视图(WebFramework就是这样)

例如,在Java和JPA中,您有用于查找实体的
entityManager
,可能对其执行某些操作等。该
entityManager
是否应在控制器中使用,或者是否应创建另一层,例如控制器使用的“服务”。但是,这个服务器层是否属于MVC中的模型?在Rails中如何实现这一点


我认为我的模型和控制器的概念都不正确

将应用程序看作是分层的。当在每一层上工作时,总是在想,“这个层是依赖于它上面的层还是它可以独立工作?”这是一个好的MVC应用程序的基础

当考虑MVC风格的应用程序中的层时,有几个

在我看来,层(从上到下)是视图、控制器、业务逻辑和数据访问

视图可以是JSP,甚至是来自jQuery的AJAX请求。这是用户与应用程序交互的地方。视图将信息发送到业务逻辑层进行工作

应该编写控制器来收集从视图发送给它的数据,以业务逻辑能够理解的方式进行转换,然后将信息传递到业务逻辑层。控制器还可以获取从业务逻辑层检索的信息,对其进行转换,并将其发送回视图。这里不应该出现真正的“业务逻辑”。将其视为视图和业务对象层之间的代理。这也是验证视图提交的数据的好地方

业务逻辑是一个中间层,通常在控制器和数据访问层之间。这也可以称为服务层。它应该写得不知道什么叫它。如果编写正确,您可以在独立应用程序中使用此层。这里是许多应用程序智能应该发生的地方。很多时候,这个层只是用来调用数据访问层并将结果返回给控制器。但是,这里可能会发生很多其他事情,比如数据操作、计算、数据安全、验证等

数据访问层的编写方式应确保它接受输入、检索适当的数据、将其转换为可用形式并返回。该层不应该知道或关心它的名称,应该以这种方式编写。同样,该层不应该知道它在web应用程序或独立应用程序中。在form或ORM(对象关系映射)框架中,有很多选项可以使您的生活更简单。如果您的应用程序比琐碎的应用程序更简单,那么您应该考虑使用它

在传统意义上,模型可以是业务逻辑层和数据访问层,也可以是与之相关的域对象

以“银行账户”为例:

“BankAccount”听起来更像一个域对象(数据库中数据的表示),而不是一个包含逻辑的类。通常,域对象只有它们需要的字段(帐号、余额等)和getter和setter

用户可以登录他们的银行网站。登录时,视图将用户名发送给控制器(BankAccountController)。控制器从请求中提取此信息并将其发送到服务层(BankAccountService)。服务层将此信息发送到数据访问层,数据访问层查询用户可能拥有的银行账户,并将其返回给服务层,服务层将其返回给控制器。控制器将以某种方式操纵这些信息,以便视图层可以向用户显示这些信息。例如,当用户在账户之间转账时,会发生类似的一系列事件

希望这有助于。。。如果您还有任何问题或有什么不清楚的地方,请告诉我

编辑:

除了其他用户发布的链接外,维基百科还有一篇关于MVC的简短但相当不错的文章


阅读1]2]3]和更多可能的副本感谢您花时间回答:)我想我理解得稍微好一点,但您谈到了服务层和控制器层的验证。有什么区别?在我了解了域对象之后,服务和数据访问层是MVC中的M。在Rails中创建这样的层(类放在哪里)正常吗?我知道数据访问是由框架作为活动记录提供的,但我考虑的是服务层。