- 博客(177)
- 收藏
- 关注
原创 软件之构件与中间件
构件又称为,是一个自包容、可复用的。构件是一个程序集,或者说是一组程序的集合。这个集合可能会以各种方式体现出来,如源程序或二进制的代码。这个集合整体向外提供统一的访问接口,构件外部只能通过接口来访问构件,而不能直接操作构件的内部。构件的两个最重要的特性是与。:构件是最高层级的复用单元,它由多个对象协作构成,而这些对象往往按照功能职责被组织在不同的模块中。
2026-03-13 10:16:59
307
原创 架构的质量属性
本文系统介绍了软件架构评估中的十大核心质量属性,包括性能、可伸缩性、可用性、可靠性、安全性、弹性、可维护性、可测试性、可部署性和可观测性。每个属性从定义、典型关注点、优化策略和场景示例四个维度进行详细阐述,为软件架构设计提供了全面的评估框架。这些质量属性共同构成了衡量系统优劣的关键指标,帮助开发者在功能实现之外,从多维度保障系统的整体质量。文章通过具体案例展示了不同质量属性在实际系统中的实现方式与价值。
2026-03-08 12:37:40
347
原创 基于服务的架构(SOA)
面向服务架构(SOA)是一种通过标准化服务组件实现系统整合和业务灵活性的架构模式。其核心特征包括服务自治、松散耦合、服务契约、可重用性和可发现性。SOA由服务提供者、消费者、注册中心和企业服务总线(ESB)四大组件构成,其中ESB作为中间件平台支持异构系统间的消息交互。该架构通过将业务功能封装为独立服务,实现系统解耦、快速组装和资产重用,帮助企业提高IT响应能力和降低开发成本。
2025-09-01 00:05:57
620
原创 项目中使用ORM与原生SQL的区别
摘要:ORM(对象关系映射)与原生SQL各有优劣,ORM提供高级抽象,开发效率高但性能稍逊;原生SQL性能更好但维护成本高。建议采用混合策略:80%常规操作使用ORM,20%复杂查询用原生SQL。选择时需考虑项目需求、团队技能和维护成本,最佳实践是两者结合以兼顾开发效率和运行性能。
2025-08-09 16:44:51
362
转载 Serverless学习与实践
摘要:Serverless架构代表了云计算演进的最高阶段,通过FaaS(函数即服务)和BaaS(后端即服务)实现基础设施完全解耦。其核心优势包括自动弹性扩展、按需付费和零运维管理,适用于Web后端、数据处理等场景。虽然面临冷启动延迟、供应商锁定等挑战,但通过混合架构和优化策略可有效应对。随着多云支持、AI融合等趋势发展,Serverless正推动计算范式向"纯粹编写代码"进化,成为云原生时代的重要技术方向。
2025-07-18 15:15:17
259
原创 Nacos3在.NET中的简单应用
Nacos是一款阿里巴巴开源的云原生平台组件,集服务发现、配置管理和服务管理于一体。本文介绍了Nacos的核心功能(服务注册发现、动态配置管理)及其优势(易用性、高可用性、生态丰富),并详细演示了在Windows11环境下的安装过程(包括JDK17配置和鉴权设置)。重点展示了如何在.NET8项目中集成Nacos,实现配置中心(动态获取配置)和服务注册发现(负载均衡调用),同时总结了配置过程中遇到的常见问题及解决方案(端口设置、鉴权配置)。通过实际案例验证了Nacos在微服务架构中的实用价值。
2025-07-11 18:27:34
1403
原创 MVC、MVP、MVVM与RIA架构
MVC、MVP、MVVM与RIA架构是四种经典的软件设计模式,核心目标是通过分层解耦提升代码可维护性。MVC将应用分为模型、视图和控制器三层,适合传统Web开发;MVP引入Presenter作为中间层,彻底解耦视图与模型,在Android开发中广泛应用;MVVM通过数据绑定实现视图与模型的自动同步,被Vue/React等框架采用;RIA则专注于富客户端应用的交互体验。这些架构通过分离数据、界面和逻辑,适应了从桌面应用到现代Web开发的演进需求,其核心思想仍是当前软件设计的重要准则。
2025-07-07 00:48:55
642
原创 客户机/服务器 (Client/Server) 模式
客户机/服务器模式(C/S)是信息系统中的核心架构,主要包括两层和三层结构。两层C/S由客户端直接连接数据库服务器,适合局域网环境但维护成本高、安全性低;三层C/S引入业务逻辑层,实现职责分离,提升可维护性和安全性,适用于金融、ERP等复杂系统。B/S架构作为三层C/S的典型应用,通过浏览器与Web服务器交互,降低了客户端维护成本。尽管现代技术趋向微服务,但C/S架构在高性能、高安全场景仍具优势。开发中需根据系统规模、安全需求选择合适的架构模式。
2025-07-06 15:56:53
605
原创 C2架构风格
C2架构风格是一种基于组件和消息传递的层次化架构模式,强调松耦合和可扩展性。其核心元素包括组件(实现独立功能)、连接器(消息路由中介)和消息(异步事件或通知)。组件间通过连接器进行严格层级通信,禁止直接连接。典型交互流程遵循请求自上而下、响应自下而上的规则,支持事件驱动模型。C2架构的优势在于松耦合、高内聚、易扩展和动态演化,特别适合GUI系统和分布式应用,但存在性能开销和调试复杂度等挑战。通过智能家居控制系统的Python案例,展示了C2架构在分层组件间的请求/通知消息交互流程。
2025-07-05 21:58:56
645
原创 闭环控制架构
闭环控制架构是一种通过反馈回路实现系统自我调节的软件架构风格。其核心组件包括设定值、传感器、控制器、执行器和被控对象,通过"输入→控制→执行→反馈"的闭环流程实现精准调控。主要采用PID控制器等算法,具有稳定性强、精度高、自适应等优势,但也面临设计复杂、调试困难等挑战。典型应用包括工业自动化、汽车电子、医疗设备等领域。案例展示了智能水温系统通过PID算法实现±0.5℃的精准控温,以及微服务流量调控等实际应用场景。这种架构特别适合需要抗干扰和高精度的动态环境控制系统。
2025-07-05 16:53:44
608
原创 调用/返回体系结构风格
调用/返回体系结构风格是一种分治策略,通过分解系统为子程序降低复杂度。主要包括主程序/子程序、面向对象、层次型和客户端/服务器四种风格。主程序/子程序风格采用单线程控制,通过层级调用实现模块化;面向对象风格将数据与操作封装为对象,通过消息传递交互。两种风格各有优势:主程序/子程序结构清晰但扩展性差,面向对象复用性强但复杂度高。该架构适用于流程明确的系统,其模块化特性提高了代码可维护性,是结构化编程和现代面向对象设计的基础范式。(149字)
2025-06-29 16:29:58
465
原创 虚拟机架构风格
虚拟机架构风格通过构建人工运行环境来解析和执行自定义语言,提供灵活性和跨平台兼容性,主要包括解释器和规则系统两种风格。解释器风格通过词法分析、语法分析和解释执行三个阶段处理自定义脚本或DSL,适用于动态逻辑调整和领域特定需求,但存在性能开销和实现复杂度高的缺点。规则系统风格以声明式规则实现业务与技术解耦,支持动态更新和可解释性,广泛应用于金融风控、医疗诊断等场景,但面临规则链复杂度和调试困难等挑战。两种风格都强调将业务逻辑从代码中分离,通过运行时解析实现系统行为的灵活调整,适用于需要快速迭代和动态策略的场景
2025-06-21 23:17:57
549
原创 数据流架构风格
数据流架构风格是一种以数据驱动为核心的计算机体系结构,主要包括批处理和管道-过滤器两种风格。批处理风格强调非交互式、高吞吐量的批量数据处理,适用于财务报表生成、日志分析等场景,具有高吞吐量但延迟较高的特点。管道-过滤器风格通过模块化的过滤器和管道实现数据流的单向处理,适用于编译器、日志处理等场景,具有模块化、可并行等优势,但也存在交互复杂、性能开销等问题。两种风格分别适用于不同的数据处理需求,批处理适合离线大批量任务,而管道-过滤器更适合实时流式处理。
2025-06-21 15:24:11
478
原创 Vue2中使用事件总线
在Vue2中事件总线作为一种轻量级的解决方案(不增加额外依赖,直接使用Vue内置功能)可以实现跨组件通信,具有简单易用、灵活性强(可以传递任何类型的数据、支持一对多的通信模式)和实时性(事件触发后立即通知所有监听者)特点。在Vue3中已删除$on、$off和$once方法,这些方法主要用于 Vue 2.x 中基于 Options API 的事件监听。推荐使用mitt,mitt是一个轻量级的事件库,适用于全局事件通信。
2025-06-17 14:22:08
647
原创 以数据为中心的架构风格
本文介绍了以数据为中心的三种体系结构风格:仓库风格、超文本风格和黑板风格。仓库风格采用中央数据存储和独立构件协作的模式,适用于数据集中管理场景;超文本风格通过非线性链接组织信息,适合灵活的信息检索;黑板风格则通过共享数据空间和知识源协作解决复杂问题。文章详细分析了各风格的核心组成、优势挑战及典型应用场景,并通过代码编辑器、语音识别等案例说明实现方式。最后对比了黑板和仓库架构在控制方式、数据处理等方面的差异,为不同场景下的架构选型提供参考。
2025-06-16 09:17:14
502
原创 软件架构风格
摘要:本文探讨了信息系统架构与系统架构的关系,指出架构设计通常更侧重软件部分。系统架构作为系统的整体结构,包含组件、连接件和约束规范,是开发过程中的关键环节。文章详细介绍了五种主要架构风格:数据流风格(批处理、管道-过滤器)、调用/返回风格(主程序/子程序、面向对象、分层、客户端/服务器)、虚拟机风格(解释器、规则系统)。每种风格通过特定组件和连接方式解决不同系统需求,如数据驱动、模块化或虚拟执行环境,为系统设计提供结构化方法。架构设计直接影响系统的健壮性和扩展性。
2025-06-15 14:00:46
528
原创 独立构件架构风格
独立构件风格摘要 独立构件风格通过将系统分解为松耦合的独立单元来提升灵活性和可维护性。主要包括两种子风格: 进程通信风格:通过明确定义的IPC机制实现进程间交互,特点包括独立进程、显式通信和并发处理。适用于微服务、分布式系统等场景,具有跨平台、模块化优势,但面临通信延迟和调试复杂度挑战。 事件驱动风格:以事件为媒介实现组件间异步通信,核心要素包括事件生产者、消费者和通道。具有松耦合、实时响应等优势,典型应用于电商订单系统等需要快速响应的场景,但需处理事件流复杂性问题。 两种风格对比显示:事件驱动侧重业务语义
2025-06-14 15:21:24
488
原创 在.Net6中用gdal实现第一个功能
2)GDAL.Native 包:这是 GDAL 的本地(Native)包,它包含了 GDAL 的本地二进制文件,用于与底层操作系统进行交互。3)GDAL.Plugins 包:这是 GDAL 的插件(Plugins)包,它包含了一些额外的插件文件,用于提供对某些特定数据格式或功能的支持。1)GDAL 包:这是 GDAL(Geospatial Data Abstraction Library)的主要包,它提供了访问和处理各种地理空间数据格式的功能。GDAL 包包含了 GDAL 的核心库以及相关的文件和资源。
2024-03-29 18:00:47
1518
1
原创 含内环图形在OpenLayers中展示时空洞被填充
在一次arcgis中图形转到OpenLayers中展示时,发先含有空洞的一个面在展示时,有部分空洞被自动填充了。对于Polygon有一个以上的环,第一个必须是外环,其他的必须是内环。外环与表面形成边界,内环(如果存在)与表面形成边界孔。可见就是环顺序导致的前端展示错误,于是就想着调整环顺序解决。可见右侧空洞被填充了,明显不太合理。于是去百度了下,得知。
2023-04-06 18:59:31
773
原创 PostGIS中常用函数整理记录
本文介绍了PostGIS中常用的地理空间数据标准与函数。主要内容包括: OGC标准格式: WKT(文本描述几何对象) WKB(二进制表示) GML(基于XML的地理标记语言) KML(可视化地理数据) SRID(坐标系标识) WKT几何对象类型:点、线、面、多点、多线、多面和几何集合等基本结构。 常用PostGIS函数: 构造函数:ST_GeomFromText、ST_MakePoint等用于从各种格式创建几何对象 输出函数:ST_AsText、ST_AsGeoJSON等将几何对象转换为不同格式 版本控制函
2022-12-25 18:49:50
4240
转载 PostgreSQL中的表复制
PostgreSQL提供了两种方式用来进行表复制:1、create table as2、create table like数据准备创建含有序列、主键、注释、CHECK约束的tmp表用于后续测试:create table tmp( id SERIAL, name VARCHAR(100) primary key, num int CHECK(10<num and num<100));comment on column tmp.id is '标识码';comment on co
2022-05-20 17:49:09
8377
1
原创 利用Arcpy批量图斑生成图片
批量生成图片任务需求环境与数据准备代码实现运行结果任务需求实际作业中,往往需要导出一些经典的案例图斑用作参考。而能称之为经典的图斑大部分都会来源于多个不同的数据源中。接下来就实现跨数据源导出指定图斑图片:环境与数据准备1、arcgis10.2.22、准备一份数据源,此处使用GDB作为数据源。3、准备提供地图要素参考信息的地图文档.mxd文件,可以在里面设置图斑信息。代码实现# encoding:utf-8import os.pathimport arcpyimport sysimp
2022-05-10 16:18:43
1645
原创 PostgreSQL自定义函数
PostgreSQL自定义函数函数语法实例动态执行语句话不多说,下面直接拿实例说话。函数语法CREATE [OR REPLACE] FUNCTION function_name (arguments)RETURNS return_datatype AS $variable_name$ DECLARE declaration; [...] BEGIN < function_body > [...] RETURN {
2022-04-27 14:24:10
11229
原创 PostgreSQL中pg_class中查不到但显示已存在
在创建表时出现错误:> 错误: 类型 "test" 已经存在HINT: 关系和与它相关联的类型名称相同,所以不能使用与任何已存在类型名称相冲突的名称.。解决方式:第一步:既然它提示数据类型名称有相同。那就去查询pg库中存储数据类型有关的表pg_type。select * from pg_type where typname='test';一查果然存在数据,直接delete删除它就可以了:delete from pg_type where typname='test';..
2022-04-19 16:59:33
1394
原创 PostgreSQL中系统表
postgreSQL接触了也好久了,一直对他处于一知半解状态。趁着最近有时间,就开始慢慢整理一下。下面先整理了postgreSQL的一些系统表相关东西,也就是当个笔记,方便以后快速查找。show data_directory;-- 查询配置文件所在位置show config_file; -- 查询数据储存目录系统表 :1)pg_authid表:包含有关数据库认证标识符(角色)的信息。一个角色体现"用户"和"组"的概念。一个用户实际上只是一个设置了 rolcanlogin 标志的...
2022-04-07 17:30:06
9312
原创 WPF在某些控件中屏蔽快捷键
在程序应用中,往往会使用某些快捷键来提升用户的使用体验。比如设置快捷键Y进行界面跳转。那么实际应用中问题是,某个界面有文本框TextBox,已设置快捷键的前提下,在文本框键入Y,会优先触发快捷键事件,且文本框不会添加Y值。 那么需求就变成了,在该界面有快捷键Y,且做文本框输入操作时不启用快捷键。利用CanExecute事件就可以了。当焦点在TextBox时,取消快捷键执行。代码如下:private void CommandBinding_CanExecute(obje...
2021-12-18 11:42:43
1272
原创 PostgreSQL函数——时间函数
时间类型timestamp:时间戳格式为1997-01-01 00:00:00,January 8 04:05:06 1999 PSTdate:日期有1997-01-01,19970101,1/1/1997,Jan-1-1997等多种格式time:时间有12:00:00,120000,12:00,8:00 AM,8:00 PM等格式interval:时间间隔格式为 1 year 2 months 3 days 4 hours 5 minutes 6 seconds缩写含义
2021-08-05 16:22:14
15999
3
转载 PostgreSQL函数——数值函数
pi()函数:"π"常量,返回圆周率SELECT pi();结果:3.14159265358979abs(x)函数:绝对值SELECT abs(-17.4);结果:17.4sign(A)函数:返回参数的符号,A的值为负、零或正时,返回结果依次为-1,0,1SELECT sign(-8.4);结果:-1ceil(A)/CEILING(A)函数:返回大于A的最小整数SELECT ceil(-2.8);结果:-2floor(A)函数:返回小于A的最大整数SELECT floor(
2021-07-31 14:50:38
3100
原创 PostgreSQL函数——字符函数
1、string || non-string ||string函数:字串或非字符串连接select 'Post'||1||'greSQL';结果:Post1greSQL2、ascii(string):参数第一个字符的ASCII码select ascii('x');结果:1203、chr(int)函数:得到某ACSII值对应的字符SELECT chr(97);结果:a4、to_hex(number int/bigint):对数值进行十六进制编码select to_hex(31
2021-07-30 17:07:20
3260
原创 ArcEngine按自定义网格切割面
数据准备:一个gdb中存在面图层Source与Result结构完全一致,其中图层Source中有一个图斑。代码:public static void Test(){ using (var comReleaser = new ESRI.ArcGIS.ADF.ComReleaser()) { var pWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); var pWor...
2021-07-16 16:58:10
479
转载 Oracle中多个字段内容加密为MD5
CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2)RETURN VARCHAR2IS retval varchar2(32);BEGIN retval := (case when passwd is null then null else utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) end); RETURN retval;.
2021-06-19 17:48:59
680
2
原创 PLSQL连接数据库使用服务名方式成功,直连方式提示ORA-12514
目录问题:解决方案:解释:问题:使用 Net Manager配置的服务名连接,可以正常连上。使用ip直连,提示ORA-12514解决方案:修改sqlnet.ora文件内容:在NAMES.DIRECTORY_PATH中加上EZCONNECT再次连接效果:解释:使用Oracle的EZCONNECT(Easy Connect Naming Method)方式支持通过ip直连数据库,其语法形式如下:sqlplus usern...
2021-01-08 14:57:16
1267
1
原创 Oracle数据库备份还原——物理备份
文章目录冷备份 异机恢复操作案例备份异机恢复当一个阶段性系统使用完后,需要备份完全的数据库,此时使用冷备份再合适不过了。冷备份需要知道源机与目标机Oracle安装位置和文件系统位置,是一种非常快速的备份方法。冷备份 1、 冷备份发生在数据库已经正常关闭的情况下2、冷备份所需备份的文件包括以下几种:所有数据文件(datefile)、所有控制文件(controlfile)、所有联机REDO LOG 文件(logfile)、密码文件3、冷备份的步骤①正常关闭要备份的实例(instance)②拷贝物
2020-12-17 12:03:44
2296
原创 Java提取对象集合的某些属性生成新集合
文章目录一、准备工作二、操作实例有时候在对List集合操作时并不想新建一个实体类来进行转换。这就涉及到将集合中对象的每个元素投影到新属性,以此来生成一个新的集合。一、准备工作定义实体类UserEntity@Datapublic class UserEntity implements Serializable { private Integer id; /** * 用户名 */ private String userName; /**
2020-12-15 16:39:26
8492
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅