Tiny快速入门之控制层开发

简介:

一、通过代码编写控制层逻辑

1.代码示例


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Controller ()
public class HelloAction implements WebContextAware{
 
     private WebContext webContext;
     
     public void setContext(WebContext webContext) {
         this .webContext = webContext;
     }
     
     @RequestMapping (value={ "/helloByMvc.do" })
     @View (value= "/helloworld/helloresult.page" )
     public void sayHelloMethod(String name) {
         if (name == null ) {
             name = "world" ;
         }
         webContext.put( "result" , String.format( "Hello, %s" , name));
     }
 
}

解释

@Controller()表示这个类是个控制层的类。 
implements    WebContextAware表示,这个要类要注入Web   上下文对象。
@RequestMapping(value={"/helloByMvc.do"})表示响应/helloByMvc.do请求,注意,这个可以有多个值。

@View(value="/helloworld/helloresult.page")表示执行完毕之后转到/helloworld/helloresult.page页面进行渲染。
WebContext,也就是Web上下文,是Tiny Web框架中的一个重要类,用于在上面放置各种数据。
你可以把它理解成像Map一样的东西,可以不断的往里面塞东西,塞进去的,在展现层就是可见的。

当然,对于上面这么简单的类子,其实不用实现WebContextAware接口,这个时候的写法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
@Controller ()
public class HelloAction {
        @ResultKey (value = "result" )
  @RequestMapping (value={ "/helloByMvc.do" })
  @View (value= "/helloworld/helloresult.page" )
  public String sayHelloMethod(String name) {
  if (name == null ) {
  name = "world" ;
  }
  return String.format( "Hello, %s" , name);
  }
}
相对来说,比上面一种写法更简单,但是唯一的限制就是只能传回一个对象了。 

?
1
2
3
4
5
6
7
8
9
@ResultKey (value= "users" )
@RequestMapping (value={ "/crud/service/tinydb/list.page" })
public List<Bean> queryUsers( @ServiceParameter (name = "TUser" ) Bean TUser) throws Exception  {
     Bean[] beans = operator.getBeans(TUser);
     if (beans != null ) {
         return Arrays.asList(beans);
     }
     return null ;
}
当然,入参也不一定必须是简单类型,对象也是允许的。

2.小结

通过注解方式,可以方便的在普通的Java类中定义控制层的处理逻辑,步骤:

  • 在类上增加@Controller注解
  • 在方法上增加@RequestMapping注解
  • 如果有返回值,可以通过注入WebContext对象来返回,也可以通过@ResultKey注解完成,但是@ResultKey只能把方法的返回值用指定Key放入上下文。

问题:如果控制层处理方法需要的是一个对象,如果办呢?

  • 如果符合Tiny框架之命名规范,所以有的一切由框架帮你自动搞定
  • 如果不符合Tiny框架之命名规范,请注入WebContext对象,自己进行组装

二、通过页面流编写控制层

1.控制层完成所有功能

当然,HelloWorld的功能太简单了,它甚至可以直接在控制层就完成了。

虽然这么做从计算机逻辑上来说是没有问题的,也会给出正确的结果,但是实际应用当中,这么做就是有问题的,因为业务逻辑是不应该在控制层完成的。

所以,上面的做法是错误的,也是不推荐的。

2.业务流和页面流分离

所以正确的是编写一个业务流:


上面编写了流程处理,然后就可以编写写页面流了:

当然,它也不一定都是一条线的,也可以是复杂的,比如:

页面流这里只要调用一个服务就可以,由于调用完服务,服务的结果会自动放在上下文当中,因此默认是不需要进行任何附加处理的。

3.小结 

通过页面流的方式,有非常清晰的页面处理逻辑展示,更容易理解业务的处理过程。由于不用写程序,不必担心程序员在里面添加一些危险代码(在某些特殊行业这个是要严格防止的),流程即文档,可以快速生成文档。 

Tiny框架中已经原生有了许多页面流组件,当然也支持激情四射的你自定义添加组件,这个会涉及到流程组件开发方面的问题,不在这一节当中详细说明了。

4.文档生成

第一步:选择向导


第二步选择要生成的文档

然后,就是看生成的文档了

技术经理完全可以通过看文档就知道程序的执行结果及程序员完成的情况。

好像有点走题哦,下次再重点介绍流程编排相关的事情。

总结

Tiny框架的控制层,提供了对象自动组装、数据校验、代码方式编写控制层、流程编排方式编写控制层等灵活多样的编写方式。真正把程序员从繁杂的工作当中解脱出来,只做自己需要做的事情。

至此,Tiny快速入门的主要四节内容已经讲了三节,回顾一下就是:

Tiny快速入门之服务开发

Tiny快速入门之Web界面快速开发实践

Tiny快速入门之控制层开发 

明天将编写Tiny快速入门之流程开发,敬请期待

相关文章
|
6月前
|
机器学习/深度学习 人工智能 测试技术
11种开源即插即用模块汇总 !!(附论文和代码)
11种开源即插即用模块汇总 !!(附论文和代码)
371 1
|
1月前
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
233 67
|
4月前
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch中的自定义层与模块开发
【4月更文挑战第18天】PyTorch教程:通过继承`nn.Module`创建自定义层和模块。自定义层需实现`__init__`(初始化参数)和`forward`(前向传播逻辑)方法。示例代码展示了一个简单的`CustomLinear`层和包含该层及ReLU激活的`CustomModule`。自定义模块可组合多个层,如`SimpleNet`模型中使用两个`CustomModule`。这使得构建满足特定需求的复杂神经网络成为可能。
|
6月前
|
开发者 索引 容器
【鸿蒙软件开发】Stage模型开发概述应用/组件级配置
【鸿蒙软件开发】Stage模型开发概述应用/组件级配置
333 0
【鸿蒙软件开发】Stage模型开发概述应用/组件级配置
|
PyTorch 算法框架/工具 异构计算
PyTorch高级教程:自定义模型、数据加载及设备间数据移动
在深入理解了PyTorch的核心组件之后,我们将进一步学习一些高级主题,包括如何自定义模型、加载自定义数据集,以及如何在设备(例如CPU和GPU)之间移动数据。
|
数据采集 算法 数据可视化
MMdetection框架速成系列 第03部分:简述整体构建细节与模块+训练测试模块流程剖析+深入解析代码模块与核心实现
按照抽象到具体方式,从多个层次进行训练和测试流程深入解析,从最抽象层讲起,到最后核心代码实现,希望帮助大家更容易理解 MMDetection 开源框架整体构建细节
604 0
|
机器学习/深度学习 存储 Kubernetes
快速入门统一模型部署(Model Serving)框架 BentoML
BentoML 是一个用于机器学习模型服务的开源框架,旨在弥合数据科学和 DevOps 之间的差距(gap)。 数据科学家可以使用 BentoMl 轻松打包使用任何 ML 框架训练的模型,并重现该模型以用于生产。 BentoML 协助管理 BentoML 格式打包的模型,并允许 DevOps 将它们部署为任何云平台上的在线 API 服务端点或离线批量推理作业。
|
存储 测试技术 数据安全/隐私保护
RobotFrameWork接口项目分层及通用控制方式
RobotFrameWork接口项目分层及通用控制方式
1003 0
RobotFrameWork接口项目分层及通用控制方式
|
机器学习/深度学习 Kubernetes 并行计算
从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制
2016 年,随着 AlphaGo 的走红和 TensorFlow 项目的异军突起,一场名为 AI 的技术革命迅速从学术圈蔓延到了工业界,所谓 AI 革命从此拉开了帷幕。该热潮的背后推手正是云计算的普及和算力的巨大提升。
从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制