Contrller应该做什么

探讨了在RIA环境下,控制器(controller)作为会话层的重要角色,负责处理用户状态与后端业务逻辑之间的联系,并分析了其在现代软件架构中的定位。

看看这段代码:

class TaskController < ApplicationController
  active_scaffold :tasks

  protected

  def before_update_save(record)
    record.updated_by = current_user
  end
end
 



我们常常要讨论一段逻辑放在哪里,页面和controller之间一般好说,问题在于业务层和controller之间。而这个例子很典型,current_user这样的信息不可能在业务层得到,因为这是状态信息,而controller可以提供这些。

在RIA的冲击下,controller的功能不再包含大量用户UI的交互逻辑,因此它的价值也就凸现了出来──会话,这才是controller真正擅长的地方。从这个意义上说,我们从前搞不清楚的业务逻辑层/服务层/表现层的架构体系,现在可以用更加容易理解的架构进行代替了:业务逻辑层/会话层/表现层

这里,唯一不变的仅仅是业务逻辑层,其它两个都要说明:

会话层就是controller,在一个无状态的架构中,最终将用户状态与后端业务联系的就是这个会话层──它的职责也仅此而已。
表现层一般对应我们常说的html/js/css等,它是RIA的,它自己有MVC结构,由于都在浏览器上,因此具备很好的用户响应能力。
换个角度看,有了会话层和表现层,这个系统架构再加上tcp/ip协议,看看像不像osi七层?

也许开放系统体系结构(OSI)的7层协议本来就是网络架构和应用架构衔接的结果

<think> 首先,用户正在询问关于“Mono保存控制器”的信息。根据引用,这似乎与响应式编程有关,特别是在Spring WebFlux框架中,它使用Project Reactor的类型如Mono和Flux。 让我回顾一下用户提到的引用: - **引用[1]**:讨论带有Spring Security、RSocket和Kafka的Mono。示例包括控制器方法,例如带有@GetMapping或@MessageMapping的Mono。 - **引用[2]**:关于安装Mono(可能是一个运行时环境),但不太相关。 - **引用[3]**:展示了使用MultipartFile进行文件上传的控制器方法。 - **引用[4]**:定义了一个带有Mono方法的UserService接口,例如saveUserInfo。 - **引用[5]**:简要提到了与MongoDB的集成以及使用Thymeleaf。 用户请求的是“Mono保存控制器”,这可能指的是一个处理保存操作的控制器,可能使用Mono类型。在引用中: - 引用[1]有控制器示例。 - 引用[4]对saveUserInfo有一个服务接口,该接口返回一个Mono<Void>。 - 引用[3]展示了带有命令对象的控制器方法。 关键点:控制器通常处理HTTP请求,服务处理业务逻辑。所以,“保存控制器”可能是一个控制器方法,调用保存操作的服务。 在我的回复中,我需要: 1. 使用中文回应。 2. 结构清晰,步骤分明。 3. 在行内数学表达式中使用$...$(但在这个语境下可能不直接相关)。 4. 为独立公式使用$$...$$(可能不适用)。 5. 生成相关问题。 6. 在引用的段落末尾自然地添加引用标记。 用户说:“我想查找关于Mono保存控制器(Controller)的相关信息 请问Mono save Controller相关信息” 所以,他们想要关于使用Mono处理保存操作的控制器方法的信息。 基于引用: - 在引用[1]中,有一个使用@AuthenticationPrincipal获取用户资料的示例控制器。 - 在引用[4]中,有一个saveUserInfo服务方法返回Mono<Void>。 - 在实际应用中,控制器可能会调用此服务。 一个典型的保存控制器可能类似于: ```java @PostMapping("/users") public Mono<Void> saveUser(@RequestBody Mono<User> userMono) { return userService.saveUserInfo(userMono); } ``` 或者在引用[3]中,有一个带有多部分文件的表单处理方法。 组织我的回应: 1. **介绍**:解释什么是带有Mono的保存控制器。 2. **关键组件**: - 控制器注解如@PostMapping。 - 使用Mono作为参数或返回值。 - 集成服务。 3. **示例**:提供来自引用的代码示例。 4. **最佳实践**:简要提及错误处理等(基于引用中的timeout)。 5. **相关问题**:生成相关问题。 确保引用在适当的地方: - 提及引用[1]用于控制器集成。 - 引用[4]用于服务接口。 - 引用[3]用于表单处理。 最终响应结构: - 解决问题逐步进行。 - 使用代码块显示示例。 - 在末尾添加相关问题。 相关问题想法: 1. 如何在一个保存控制器中处理错误? 2. 在响应式控制器中,Mono与Flux的区别是什么? 3. 如何在Spring WebFlux中测试一个保存控制器? 4. 与数据库的实际集成是怎样的?(引用[5]对此进行了暗示)。 </think> ### Mono 保存控制器的相关信息 在 Spring WebFlux 框架中,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值