web服务程序设计探索(2)——插件模型

大模型web服务部署—lobe-chat 部署 lobe-chat 的强大之处在于提供了视觉,语音对话,图像识别的功能,而且有手机端、网页端、电脑端使用起来很方便,生态完善。 阅读详情

一、模型图

这里写图片描述

该模型是自己摸索出来的一种web服务设计模型,整个围绕核心业务逻辑处理模块进行。在这个模型中,core业务逻辑处理中心处理负责执行所有逻辑处理流程,该模块所需要的所有副作用操作都以“插件”的形式从参数中传入。而所谓的“插件”,其实就是一些处理副作用读写的函数。

二、模块说明

service模块

提供网络服务,根据具体使用的技术,对客户端来的请求进行路由分发,提取出请求参数,对参数进行解密、格式转换、验证,对客户端进行登录认证等;对要返回给客户端的数据进行包装,比如转换成客户端所要求的格式、加密、加status-code等。这些操作独立于业务逻辑之外,是各个请求所通用的,通常可以以中间件的形式来实现。

core业务逻辑处理模块

业务逻辑处理模块实现了整个业务流程,在这个模块中,数据来源有两块:一是客户端请求所带的参数,二是从插件中获取的数据;也就是,这个模块会以参数的形式告诉调用者,我需要哪些插件(fn集合),需要哪些其他参数;调用者负责提供正确的插件和参数。示例:

(defn handle
    [{:keys [fn-save-db fn-user-info]} username]
    (let [user-info (fn-user-info username)]
        (fn-save-db use-info)))

这个核心逻辑处理函数告诉调用者,我需要两个插件:一个保存数据到数据库,一个获取用户信息的插件;需要一个参数——用户名;这些插件集合,通过一个map结构传过来。

该模块的输出就是要返回给客户端的消息数据,这些数据还需要service层根据不同使用的网络技术做一些处理。

db-center模块

该模块封装了后台所需数据所有数据来源:数据库、内存数据、第三方远程调用、随机数据、时间数据等,也就是将所有副作用的操作函数封装了起来。

插件组装模块

该模块非常小,就是为每个请求对应的业务逻辑处理函数提供所需的插件集合。

resp-msg模块

根据客户端与服务器消息协议,组装对应的消息体。

三、优点

所有数据都来源于参数

该模型的主要优点是:核心业务逻辑处理模块通过接口参数的方式,明确告知调用者:要用这个模块,就需要提供该模块所需要的插件和数据。调用者可以在保证插件接口不变的基础之上,根据不同的需要实现插件。在使用这个模块时,控制权在调用者手中。

易于测试

保证核心业务逻辑的正确性和可靠性,是保证系统正确性的核心。测试时,可以用假的数据来实现插件,使输入到业务逻辑模块的插件返回我们指定的值(或执行我们指定的操作),这就相当于测试一个“纯函数”:输入什么参数,就输出对应的返回值。如此一来,可以很轻松地进行单元测试,保证核心逻辑的正确性。

而在系统实际运行时,就可以传入用真实数据库技术实现的插件了。

副作用的封装

db-center中封装了所有副作用操作,包括真实数据库读写,rmi/rpc/http等远程调用,内存数据读写,随机数生成,当前时间获取等;这些数据操作通过统一接口暴露给外部调用者。根据不同的使用场景,可以对这些接口进行不同的实现,比如用假数据实现一个local版(内存版)的服务(不远处调用数据库服务以及其他第三方服务等)。

四、缺点

核心业务逻辑处理模块,并不是一个真正的“纯函数”,虽然在测试的时候,可以像测试纯函数一样进行单元测试,然而因为模块中在存在写操作,如fn-sava-db,这些操作会改变一些外部资源。因此这个模块还是不安全的,然而核心业务逻辑理论上讲,只需处理逻辑,应该是非常纯的一个过程,数据的写操作并不应该是逻辑过程该干的活,因此这个模型仍有待改进。

Web应用中的实时数据自定义可视化展示技术 本文还有配套的精品资源,点击获取 简介:实时数据可视化对Web应用中的设备监控与行业分析至关重要。本文详细探讨了实时数据获取、处理、Web应用架构设计、自定义可视化工具的选择与实现、可视化设计原则、性能优化以及安全隐私保护的综合方法,旨在帮助开发者构建功能强大且用户友好的实时数据可视化Web应用。 1. 实时数据获取与处理方法 1.1 数据采集技术 在... 阅读详情

相关推荐

Axis2 Web服务客户端插件的MyEclipse集成

本文还有配套的精品资源,点击获取 简介:Axis2 WebService Client plugin是一个MyEclipse插件,专门用于创建和使用Axis2 Web服务客户端。Axis2是一个开源的、高性能的Web服务引擎,支持Web服务的实现和开发。此插件让Java开发者能够更便捷地与基于Axis2的Web服务交互,并能利用MyEclipse提供的工具自动生成和调试客户...

weixin_42599908的博客 971

web 服务器功能模块设计(部分实现)

认准一件事后,就朝着这一件事走.做一个httpserver服务器,完整的代码,完整的设计.每个程序员都应该尝试下写博客 http://droidyue.com/blog/2017/01/02/why-every-programmer-should-try-to-write-blogs/ 今天确定下web server的框架.linux下使用libevent作为基础框架来搭建这个web serve

脚踏实地,不断突破自我,每天有收获就OK 4023

Apache Axis2自动生成Web服务代码插件实战指南

Web服务是一种可以使用网络(通常是Web)进行互操作的应用程序,是一种跨平台的技术。它允许系统使用标准化的XML消息传递通过网络进行通信。Web服务具有高度的互操作性,因为它们基于开放标准如HTTP、XML和SOAP。其特点包括跨语言、跨平台的特性,通过网络提供服务以及松耦合的特性。简单对象访问协议(SOAP)是一种基于XML的消息传递协议,用于在网络上交换结构化信息。它定义了消息格式以及消息如何在客户端和服务端之间传递。SOAP旨在提供一种简单的,轻量级的通信协议,并且独立于编程语言和平台。

weixin_42502089的博客 759

插件化架构设计(2):插件化从设计到实践该考量的问题汇总

插件化架构又称微核架构,指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。插件化架构一般有两个核心的概念:内核和插件。内核(pluginCore)通常只包含系统运行的最小功能;插件(plugin)则是互相独立的模块,一般只会提供单一的功能。内核除了插件的管理功能,还会将要完成的所有业务进行抽象,抽象出最小粒度的基础接口,供插件方来调用。这样,插件开发的效率将会极大的提高。

周陆军的博客,分享it技术。 3098

Axis2 Eclipse插件集成与Web服务开发实战

Axis2或许不再是当下最热门的技术,但它所代表的契约优先、模块化、可追溯的设计理念,至今仍在影响着现代API架构的发展方向。而Eclipse插件的存在,则提醒我们:优秀的工具应当服务于人,而不是让人去适应工具。当你熟练掌握了这套组合拳之后,你会发现——无论是调试复杂的SOAP头字段,还是快速搭建一个测试服务,都不再是令人畏惧的任务。相反,它们变成了你可以轻松驾驭的日常操作。而这,才是技术真正的魅力所在 💡。本文还有配套的精品资源,点击获取。

weixin_42430341的博客 698

Axis2 Web服务在Eclipse中的插件开发指南

本文还有配套的精品资源,点击获取 简介:Axis2是一个强大的Web服务框架,而axis2-eclipse-plugin插件为Eclipse用户提供了一个便捷的环境来开发、调试和部署Axis2 Web服务。该插件集成到Eclipse IDE中,提供代码生成、服务部署、调试支持、测试工具、版本兼容性、文档生成和模板支持等核心功能。它简化了从WSDL生成代码或从Java类生成W...

weixin_42594419的博客 1054

详解前端领域的插件式设计

插件,是一个常见的概念。例如,当我们需要把我们前端代码中的 css 样式提取打包,我们可以用 webpack 的 mini-css-extract-plugin,或者你如果用 rollup 的话,可以选择 rollup-plugin-postcss。再比如我们可以给 babel 配置 @babel/plugin-proposal-decorators 插件来支持装饰器语法;除了上述打包编译相关的工...

zz_jesse的博客 558

Axis2 Web服务开发实战指南

本文还有配套的精品资源,点击获取 简介:Axis2是Apache基金会的Web服务框架,用于构建和部署Web服务。本项目涵盖Axis2的服务器端和客户端开发,包括创建服务、服务部署、WSDL生成、客户端代码生成和调用、异常处理等关键开发步骤。项目还详细介绍了接口设计、项目结构、开发环境设置、服务编写、部署、客户端生成、测试调用以及最佳实践。掌握Axis2开发Web服务能够实...

weixin_32098457的博客 1543

开源web在线数据库设计软件 —— 筑梦之路

DrawDB是一款多功能且用户友好的在线工具,允许用户轻松设计数据库实体关系。通过简单直观的界面,DrawDB使用户能够创建图表、导出SQL脚本、自定义编辑环境,而无需创建账户。DrawDB通过提供数据库模式中实体关系的视觉表现,简化了数据库设计过程。用户可以轻松创建表格、定义列、建立关系,并且仅需点击几下就可以生成SQL脚本。该工具直观的界面适合初学者和经验丰富的数据库设计师,提供了一个设计复杂数据库结构的流畅体验。

筑梦之路 1070

固定翼飞行器建模(一)——六自由度动力学

前两期文章讲完了气动力和气动力矩的模型,本期将来讲解一下六自由度部分的动力学与运动学方程。

2302_80148937的博客 1万+

大数据之VIP(Virtual IP,虚拟IP)负载均衡

VIP(Virtual IP,虚拟IP)负载均衡是一种在计算机网络中常用的技术,用于将网络请求流量均匀地分散到多个服务器上,以提高系统的可扩展性、可靠性和性能。

赵玉的专栏 4122

QGIS2Web:将QGIS项目转换为交互式Web地图的强大插件

QGIS2Web是一个功能强大的开源QGIS插件,它能够将您在QGIS中创建的地图项目无缝转换为基于Web的交互式地图。该插件支持Leaflet和OpenLayers两种主流JavaScript地图库,无需任何服务器端软件即可实现完整的Web地图发布。 ## 核心功能特性 QGIS2Web能够复现QGIS项目的绝大多数功能特性,包括图层管理、地图范围设置以及各种样式配置(支持分类和分级符号化)

gitblog_00458的博客 1220

LeGO-LOAM相对LOAM的改进---地面分离的方法-算法原理+代码讲解

实际上此种地⾯分离算法有⼀些简单,我们可以结合激光雷达安装⾼度等其他先验信息进⾏优化,避免将桌子这些当作地面点。LeGO-LOAM中前端改进中很重要的⼀点就是充分利⽤了地⾯点,那⾸先⾃然是提取对地⾯点的提取。理想情况下, 应该接近0,考虑到⼀⽅⾯激光雷达安装也⽆法做到绝对⽔平,另⼀⽅⾯,地⾯也不是绝。对⽔平,因此,这个⾓度会略微⼤于0,考虑到作者实际在草坪之类的场景下运动,因此这个值被设置成。如上图,相邻的两个扫描线束的同⼀列打在地⾯上如AB点所⽰,他们的垂直⾼度差。,计算垂直⾼度差和⽔平⾼度差的⾓度。..

zysss_的博客 775

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

JDK版本:1.7update65 Eclipse版本:Juno Service Release 2(4.2.2)

怀揣梦想,努力前行 4万+

【Unity动画优化插件】BT - OptiAnimX —— AAA级动画优化框架深度剖析

BT - OptiAnimX 是一款面向 Unity 的高性能动画优化框架,核心目标是解决多角色动画场景中的性能瓶颈问题。该插件对标《战争机器5》和《巫师3》等 AAA 游戏中的动画优化技术,通过一整套自动化与智能化的优化策略,将动画性能提升与视觉质量控制结合在一起。它适用于从移动端、VR 到高端 PC 的多平台项目,尤其在“多人角色 + 高频动画”的场景中表现突出,例如 MMO、开放世界、动作游戏等。BT - OptiAnimX 本质上是一套“动画性能调度系统”,而不仅仅是优化工具。

2403_88403568的博客 433

道路场景分割:车道线、可行驶区域与路沿检测

道路场景分割:车道线、可行驶区域与路沿检测​ ,人工智能,计算机视觉,大模型,AI,文章围绕道路场景分割展开,涵盖车道线、可行驶区域与路沿检测。介绍了基本概念、重要性,各部分检测的类型、方法、难点及解决思路,还涉及技术融合、数据集、评价指标、发展趋势、应用案例、代码示例、不同天气处理、实际问题与方案、实现流程、相关技术工具、教育研究应用、产业前景、伦理安全问题及学习资源等,全面阐述了道路场景分割的多方面内容,为相关学习和研究提供了丰富信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

vue3+vite+AI大模型实现谷歌插件-web诊断

谷歌插件-web诊断工具是基于vue3、vite和AI大模型技术的完美结合,工具致力于捕获页面报错信息,并为您提供高效的解决方案。

qq_15509267的博客 830

随机森林遥感反演详细教程

通过这篇文章,我们展示了如何使用Python对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。

热爱分享,热爱记录 2952

web服务程序设计探索(3)——中间件模型

一、中间件模型中间建模型是插件模型的一种改进版。上次提高插件模型中,核心业务逻辑处理模块并不是一个真正的“纯函数”,因为它里面存在写操作。中间件模型正是将这些写操作剥离出来,放在一个中间件中。中间件只负责执行事务(包括数据库操作,rmi/rpc/http远程调用,内存数据操作等),不理解业务,比如它只负责SQL语句的执行,而不知道SQL是如何组织的,也不知道SQL的内容。二、模块说明因为大多数模块和

蜗牛的专栏 1107

YOLOv8改进:在C2F模块中引入RepGhost Bottleneck模块

C2F类是YOLOv8中的C2F模块的实现,它包含一个RepGhostBottleneck模块、一个卷积层和一个批归一化层。通过在C2F模块中引入RepGhost Bottleneck模块,我们可以在保持计算效率的同时提升模型的表达能力。这是因为RepGhost Bottleneck模块通过引入重复的卷积核来扩展模型的感受野,从而增加了模型对不同尺度目标的感知能力。RepGhost Bottleneck是一种用于卷积神经网络的改进模块,它可以在保持计算效率的同时提升模型的表达能力。希望以上内容对你有帮助!

IlgCrystal的博客 1306

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

大型 Web 应用插件化架构探索

简介: 随着 Web 技术的逐渐成熟,越来越多的应用架构趋向于复杂,例如阿里云等巨型控制台项目,每个产品下都有各自的团队来负责维护和迭代。不论是维护还是发布以及管控成本都随着业务体量的增长而逐渐不可控。在这个背景下微前端应用而生,微前端在阿里内部已经有许多成熟的实践,这里不再赘述。本文以微前端为引子(蹭热度),探讨一些另类的 Web 应用所面临的类似问题。 前言 随着 Web 技术的逐渐成熟,越来越多的应用架构趋向于复杂,例如阿里云等巨型控制台项目,每个产品下都有各自的团队来负责维护和迭代..

阿里云云栖号 1228

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

eclipse安装web插件以及创建web项目

eclipse没有自带的web文件,需要安装web插件才能穿件web项目, 安装java web插件 1 、首先看一下自己的eclipse版本号 可以通过找到eclipse的安装目录,找到readme文件,打开其中的html文件,我的是4.10版本的,代号是oxygen,或者可以通过eclipse中的help - > About Eclipse IDE , 2 .然后help->...

非凡的博客 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何免费将QGIS地图转换为交互式Web地图?QGIS2Web插件的终极指南

QGIS2Web是一款强大的QGIS插件,能够帮助用户将QGIS项目一键导出为基于OpenLayers或Leaflet的交互式Web地图,无需任何服务器端软件支持。无论是GIS新手还是专业人士,都能通过它快速实现地图的网络化展示与分享。 ## ???? QGIS2Web:让地理信息触达更广阔的网络世界 在数字化时代,地理信息的传播不再局限于桌面软件。QGIS2Web作为QGIS生态中的明星插件,以...

gitblog_00531的博客 441

WEB服务的部署

WEB服务的部署

qq_46219965的博客 5273
上一篇: web服务程序设计探索(1)——俄罗斯套娃模型
下一篇: web服务程序设计探索(3)——中间件模型
蜗牛lz
博客等级 码龄15年 17粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值