2024系统分析师---论设计模式及其应用

摘要:

本人于2018年1月参与了中石化XX油田XX采油厂“用电管理系统”的项目建设,该系统建设目标是实现分单位、分线路、分系统评价、优化、考核,全面提升采油厂用电管理水平。在该项目组中我担任系统架构师一职,主要负责系统整体架构设计。本文以该项目为例,讨论软件设计模型的应用,包括问题的分析,以及如何选择和应用设计模式。整个系统采用了MVC设计模式作为主体设计模式,以单例模式、抽象工厂模式、迭代器模式、策略模式等多种模式作为辅助模式,设计模式的应用,使该系统具备良好的稳定性、可扩展性、可修改性,最终系统开发取得圆满成功。系统开发历时10个月,目前已上线稳定运行一年多,获得用户的一致好评,该项目也成功获得了当年度分公司科技进步创新一等奖。

正文:

“用电管理系统”项目是采油厂能源管控中心系统的一个子系统。能源管控中心是中石化集团公司十三五规划中的“能效倍增”计划在胜利油田分公司的示范应用项目,该示范项目能够在实现企业节能目标管理、能源计量统计、节能潜力识别、能效分析优化的同时,有效支撑企业实施节能技术改造、促进企业用能水平不断提升。“用电管理系统”的建设目标是建立覆盖厂、区两级用电管理一体化体系,实现分单位、分线路、分系统评价、优化、考核,达到电网运行质量实时监控、异常情况精准管控、能耗总量全面受控,按照运行产量的方式运行电量,全面提升采油厂用电管理水平。该项目功能设计参考PDCA闭环管理的理念,共设计包括用电计划、用电分析、用电优化、用电考核、设备管理等五大功能模块。

我作为单位技术骨干之一,主持并参与了项目计划制定、需求分析、整体架构设计与技术选型、底层设计、部分编码等多项工作。下面,我将首先介绍软件系统开发中常用的软件设计模式、每种类型特点及其所包含的设计模式具体含义,然后详细介绍“用电管理系统”的分析和设计过程中所采用的设计模式及具体实施效果。

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。设计模式根据目的可以分为创建型模式、结构型模式和行为型模式 3 种,其中创建型模式用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种。结构型模式用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。行为型模式用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。设计模式还可以根据作用范围分为类模式和对象模式,其中类模式用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。对象模式用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。GoF 中除了以上 4 种,其他的都是对象模式。

项目启动后,由于油田系统对安全性、可靠性、可用性和扩展性要求很高,在架构设计工作的开始阶段,在公司技术顾问的建议下,我们决定采用三层分层架构作为该系统的软件架构模式,将系统分为应用层,中间层,数据层。在三层结构中的具体设计和开发过程中选择了许多经典的设计模式,以提高代码可复用性、可维护性、可读性、稳健性以及安全性。其中应用层负责具体业务和视图展示,如系统首页的电网拓扑展示、单位用电、线路用电等,其又分为视图层与业务逻辑层,主要使用了MVC设计模式实现数据、显示和处理分离,中间层除负责为应用层提供通用服务支持如系统管理服务,session管理服务等之外,还提供预报警模型、能效优化模型、优化方案推送模型等中间件支持,使用了单例、迭代器、策略、模板方法等多种设计模式,数据层负责提供数据存储访问服务,如数据库服务,缓存服务,文件服务,搜索服务等,使用了单例、抽象工厂、策略等多种设计模式。接下来,我将分层次详细对几种主要设计模式的设计过程进行论述。

首先是应用层。应用层采用了SpringMVC这一基于J2EE平台的MVC框架,主要通过Vue+BootStrap技术实现。SpringMVC是一种实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。通过MVC设计模式的使用,使开发人员可以专注于表示逻辑和业务逻辑的开发工作,实现了数据、显示和处理的分离,缩短了开发周期,减少了开发费用和维护费用,提高了开发的成功率。另外我们将系统根据应用进行水平划分,这有助于代码管理与维护。我们将系统分为用电分析,用电优化,用电考核,用电计划等十余个子系统,这里不再赘述。

其次是中间层。中间层采用了Spring、Shiro等服务框架实现。Spring框架本身就使用了大量的设计模式,例如工厂方法、单例、适配器、装饰器、代理、观察者、策略、模板方法等。在实际编码过程中,我们也采用了较多的设计模式,如单例、代理、策略等。如站库信息查询等需要统计在线人数的功能中,我们实现了一个计数器功能来统计模块的使用人数,在此类对象需要被共享的场合,采用单例模式设计的话只允许创建一个对象,通过共享该对象可以节省内存,并加快对象访问速度。通过Spring框架与合理设计模式的组合使用,缩短了开发周期,减少了开发费用和维护费用,提高了开发的成功率。

最后是数据层。由于系统需要访问Oracle、SqlServer、Mysql等多种异构数据库平台,同时还需要满足复杂的数据管理需求,针对这种情况,我们选择了抽象工厂设计模式,抽象工厂模式提供一个接口,可以创建一系列相关或相互依赖的对象,可以针对Oracle、MySQL、SQLServer分别建立抽象工厂,如指定当前工厂为Oracle工厂,则创建出来的数据库连接,数据集等一系列的对象都是符合Oracle操作要求的,这样便于数据库之间的切换。另外我们选择了MyBatis作为持久层框架,实现了业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试,极大提高了系统的可维护性。我们还选择Redis缓存提高了系统性能和访问效率。限于篇幅,不再赘述。

最终项目成功上线,正常运行了近一年,收到各方好评。尤其是标杆井推荐与耗电量推算功能,为采油厂的节能工作提供了良好的技术和数据支持。该项目也成功获得了当年度分公司科技进步创新一等奖。在系统的架构设计中,我们引入了层次架构的设计思想,有效地降低了维护成本,提高了系统的开放性,可扩展性,可重用性以及可移植性。当然还是存在一些问题的。如系统采用http协议,易被非法劫持,可以将协议修改为https来解决。还有就是旧系统在数据库层面存在很多无效的存储过程与定时任务,对数据库性能造成了影响。对这种高水平高价值的遗留系统问题,我们采用了重构整合的方式进行了改造,保证了系统的延续性。这些都是我在今后的系统架构设计工作中需要注意与改进的地方,也是日后我应该努力的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第1章 引言

目录 1. 鸢尾花分类1.1 初识数据1.2 衡量模型是否成功:训练数据与测试数据1.3 要事第一:观察数据1.4 构建第一个模型:k近邻算法(KNeighborsClassifier)1.5 做出预测(predict)1.6 评估模型 1. 鸢…

【51单片机】延时函数delay的坑——关于无符号整型数据for语句“x >= 0“变成死循环

请认真看看以下延时函数是否正确,并且指出错误:(考考C语言功底) void delay_ms(unsigned int xms) //delay x ms {unsigned int x,y;for(xxms;x>0;x--)for(y124;y>0;y--); }废话少说,上正确代码: v…

C++ 数据结构

C/C 数组允许定义可存储相同类型数据项的变量,但是结构是 C 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。 结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性&…

青少年软件编程(C/C++)等级考试试卷(二级)2023年12月

202312 青少年软件编程(C/C)等级考试试卷(二级)电子学会真题 编程题 1.统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个…

linux ftp服务选择与ftp(vsftpd,Pure-FTPd)服务安装使用教程

一 linux ftp常用的服务软件 在Linux系统中,最常用的ftp有vsftpd,Pure-FTPd,ProFTPd,Wu-FTPd,glftpd,他们的特性优缺点如下对比图: 常用的5款linux ftp对比图: 软件特性优点缺点vsf…

unity C#中使用ref、out区别和使用案例

文章目录 ref 关键字out 关键字 在Unity(以及C#编程语言中), ref 和 out 都是用来传递参数的引用,这意味着它们允许函数修改实参变量,并且这些修改会反映到调用函数的地方。但它们之间确实存在一些关键区别和使用场景…

20、Kubernetes核心技术 - 基于Prometheus和Grafana搭建集群监控平台

目录 一、概述 二、监控平台架构图​编辑 三、部署 Prometheus 3.1、Prometheus简介 3.2、部署守护进程node-exporter 3.3、部署rbac 3.4、ConfigMap 3.5、Deployment 3.6、Service 3.7、验证Prometheus 四、部署Grafana 4.1、Deployment 4.2、Service 4.3、Ing…

css-img图像同比缩小

1. HTML 中使图像按比例缩小 CSS 来控制图像的大小&#xff0c;并保持其宽高比 <!DOCTYPE html> <html> <head><style>.image-container {width: 300px; /* 设置容器宽度 */height: auto; /* 让高度自适应 */}.image-container img {width: 100%; /* …

Nginx实战 | 高性能HTTP和反向代理神器Nginx前世今生,以及它的“繁花之境”

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

尺寸公差分析 -DTAS手机装配公差案例-国产-智能

小细节 大麻烦&#xff0c;公差仿真大改造 DTAS尺寸公差分析软件-国产-智能https://www.dtas-china.com/product.html 仿真要求说明&#xff1a;计算长边装配间隙G1-G6 步骤一&#xff1a;首先双面胶②放在一个工装中&#xff0c;外形定位&#xff0c;然后将后盖①放入到工…

第三代量子计算机交付,中国芯片开辟新道路,光刻机难挡中国芯

日前安徽本源量子宣布第三代超导量子计算系统正式上线&#xff0c;这是中国最先进的量子计算机&#xff0c;计算量子比特已达到72个&#xff0c;在全球已居于较为领先的水平&#xff0c;这对于中国芯片在原来的硅基芯片受到光刻机阻碍无疑是巨大的鼓舞。 据悉本源量子的第一代、…

C++互联网公司笔试攻略

C++互联网笔试大全 "C++互联网笔试大全" 是一个相对广泛的主题,因为它可以涵盖许多与C++编程语言和互联网相关技术的问题。以下是一些可能出现的笔试问题和相关知识点: C++基础知识: 指针和引用的区别 构造函数、析构函数、拷贝构造函数 动态内存分配(new/delete…

简单用PHP实现微信小程序的游戏功能

微信小程序的兴起&#xff0c;越来越多的开发者开始关注如何在小程序中实现游戏功能。PHP作为一种流行的后端语言&#xff0c;可以很好地与小程序进行搭配&#xff0c;实现游戏功能。下面将介绍如何使用PHP来实现微信小程序的游戏功能&#xff0c;并提供具体的代码示例。 建立…

数 据 分 析 1

1.使用Wireshark查看并分析靶机桌面下的capture.pcapng数据包文件&#xff0c;找到黑客的IP地址&#xff0c;并将黑客的IP地址作为Flag值&#xff08;如&#xff1a;172.16.1.1&#xff09;提交&#xff1b;172.16.1.41 查找&#xff1a;tcp.connection.syn 2.继续分析captu…

Peter算法小课堂—树的应用

开篇先给大家讲个东西&#xff0c;叫vector&#xff0c;有老师称之为“向量”&#xff0c;当然与数学中的向量不一样啊&#xff0c;所以我要称之为“长度可变的数组” vector 头文件&#xff1a;#include <vector> 用法&#xff1a;vector<int> d; 尾部增加元素…

自定义HBase负载均衡器MyCustomBalancer实现步骤与代码解析

目录 1.HBase默认负载均衡策略 1.1 负载均衡总体流程 1.2 不能触发负载均衡的情况 1.3 负载均衡算法 2.自定义的 HBase 负载均衡器的步骤 3.MyCustomBalancer的代码细节 3.1 balanceCluster 方法的作用 3.2balanceCluster 对数据的影响 3.3监控HBase的性能指标 3.3.…

全国区县与地级市和省会的距离,2021年,shp/excel格式,附高清示意图

基本信息. 数据名称: 全国区县与地级市和省会的距离 数据格式: shpexcel 数据时间: 2021年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1djs_jl与所属地级市距离&#xff08;㎞&#xff09;2…

如何实现公网访问GeoServe Web管理界面共享空间地理信息【内网穿透】

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

GIT - 清除历史 Commit 瘦身仓库

目录 一.引言 二.仓库清理 ◆ 创建一个船新分支 ◆ 提交最新代码 ◆ 双指针替换分支 三.总结 一.引言 由于项目运行时间较长&#xff0c;分支较多&#xff0c;且分支内包含很多不同的大文件&#xff0c;随着时间的推移&#xff0c;历史 Git 库的容量日渐增发&#xff0c…

开源分布式任务调度系统DolphinScheduler本地部署与远程访问

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…