【项目总结二】重构服务器

Laravel 项目重构策略 Laravel 项目重构策略项目github地址自去年开始转为PHP开发,已经有一年。学习php基础之后,便开始使用Laravel框架。一年来,主要工作是使用Laravel开发电商系统。开发的模块也大体相同。前端,后台,API接口。三个模块是相互独立,又有互相关联的站点。以下,假设三个模块的入口分别为 shopping.cn, admin.shopping.cn, api.shopping.cn。作 阅读详情

####原始框架
服务器和客户端C++开发,桌面版客户端,每次都要配置多个服务器,每个模块一个服务器
####修改
一个主服务器+多个计算服务器,所有客户端连接主服务器,主服务连接各个计算服务器,主服务器管理一些基础数据,计算服务器管理自己模块。可扩展、易配置
####数据库
SQLite、Access、SQLServer
这里写图片描述
Command类调用管理类
DataAccess统一管理 管理类 适配器模式
管理类全部继承DBOperateBase类(把BaseSQL和DataBase联系起来)
DBSQLite 继承IDatabase
SQLiteSQL 继承至BaseSQL

public DBOperateBase(IDataBase database, BaseSQL baseSQL)
{
            m_database = database;
            m_baseSQL = baseSQL;
}
public class ClassManager : DBOperateBase
{
        public ClassManager(IDataBase database, BaseSQL baseSQL, UInt32 nProjectID, UInt32 nPartID)
            : base(database, baseSQL)
        {
            SetProjectID(nProjectID);
            SetPartID(nPartID);
        }
}
public interface IDataBase
{
        /// <summary>
        /// 数据库类型
        /// </summary>
        /// <returns></returns>
        DBType GetDBType();

        /// <summary>
        /// 执行SQL语句返回记录集
        /// </summary>
        /// <param name="sqlString">SQL语句</param>
        /// <returns>数据集</returns>
        DataSet GetDataSet(string strSQL);

        /// <summary>
        /// 执行SQL语句返回记录读取器
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        DbDataReader ExecuteReader(string strSQL);

        /// <summary>
        /// 执行SQL语句
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        int ExecuteNonQuery(string strSQL);

        /// <summary>
        /// 执行SQL返回首行首列
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        int ExecuteScalar(string strSQL);

        /// <summary>
        /// 关闭数据库
        /// </summary>
        void Close();

        /// <summary>
        /// 插入记录
        /// </summary>
        /// <param name="rs">记录</param>
        /// <param name="bQueryID">是否返回插入后ID</param>
        /// <returns></returns>
        object InsertRecord(DBRecordset rs, bool bQueryID = false);

        /// <summary>
        /// 更新记录
        /// </summary>
        /// <param name="rs">记录</param>
        /// <param name="strCondition">查询条件</param>
        void UpdateRecord(DBRecordset rs, string strCondition);
        
        /// <summary>
        /// 创建表
        /// </summary>
        /// <param name="table"></param>
        void CreateTable(DBTable table);

        /// <summary>
        /// 删除表
        /// </summary>
        /// <param name="strTable">表名</param>
        void DropTable(string strTable);

        /// <summary>
        /// 创建索引
        /// </summary>
        void CreateIndex(string strTable, string strFields, string strIndexName = null);

        void CreateUniqueIndex(string strTable, string strFields, string strIndexName = null);

        /// <summary>
        /// 开始事务
        /// </summary>
        void BeginTrans();

        /// <summary>
        /// 提交事务
        /// </summary>
        void CommitTrans();
        
        /// <summary>
        /// 回滚事务
        /// </summary>
        void RollbackTrans();

        /// <summary>
        /// 获取数据库表名列表
        /// </summary>
        /// <returns></returns>
        List<string> GetTableNameList();

        /// <summary>
        /// 获取表字段名列表
        /// </summary>
        /// <param name="strTableName">表名</param>
        /// <returns></returns>
        List<string> GetTableFieldNameList(string strTableName);

        /// <summary>
        /// 取得字段最大ID
        /// </summary>
        /// <param name="strFieldName">字段</param>
        /// <param name="strTableName">表名</param>
        /// <returns></returns>
        UInt32 GetMaxID(string strFieldName, string strTableName);

        /// <summary>
        /// 表是否存在
        /// </summary>
        /// <param name="strTableName">表名</param>
        /// <returns></returns>
        bool IsTableExisted(string strTableName);


        /// <summary>
        /// 字段是否存在
        /// </summary>
        /// <param name="strTableName">表名</param>
        /// <param name="strField">字段名</param>
        /// <returns></returns>
        bool IsFieldExisted(string strTableName, string strFieldName);
}

####ServerBase包
服务器继承ServerBase的AsyncServer服务器 读取配置, 启动,监听,
CmmSever重写 DoCommnd,进入到CommandHandler
New 一下 DataAccess,每一个构造函数会读取全局下的变量,选择对应的数据库ID
(哪一个数据库不仅仅是哪一种数据库,同时可以兼容多个数据库),ID在Packet传过来

frmServer==>CmmServer:AsyncServer==>CommandHandler(解析包并输出包)==>Command
这里写图片描述
####BaseLib包
这里写图片描述

public DBSQLServer(DBConfig config)
{
		string strConn = "Data Source=" + config.Server + ";Password=" + config.Password + ";User ID=" + config.User + ";Initial Catalog=" + config.DBName;

		try
		{
                m_Conn = new SqlConnection(strConn);
                m_Conn.Open();
        }
		catch (Exception e)
		{
			throw new Exception("数据库链接错误:" + e.Message);
		}
}

项目重构方案设计 最近接手到一个已经成型的项目,然后我们的任务就是对它进行重构,这个项目是一个功能很齐全的WPF视频播放器(附带很多其他功能),在仔细研究了项目的背景和架构以后,初步做出了一下的重构方案: 目前现状: 虽然整个系统做得很漂亮,代码也写得不错,但仍有以下不足: 1, 架构有待改善。虽然看似MVC架构,却没有遵循MVC的模式,里面逻辑和UI耦合很高,没有清晰的规律。 2, 没有充分用到WP 阅读详情

相关推荐

在大型遗留系统基础上运作重构项目

在大型遗留系统基础上运作重构项目作者:熊节(ThoughtWorks中国公司资深咨询师)(本文发表于《程序员》杂志2008年第4期)本文以ThoughtWorks中国公司与客户合作的咨询项目为背景,为读者介绍如何在一个大型遗留系统的基础上组织和运作重构项目,从而切实有效地改善系统质量。现状eMAN是客户的一个核心业务平台。该产品采用了典型的C/S结构,负责处理大量请求和计算的后

透明思考@优快云 2万+

服务器网站重构解题思路和实战

该检材是通过远程取证备份的网站源码和数据库,要求能正常登陆网站管理员后台,时间10分钟内搭建成功为熟练,30分钟内为一般。下载小皮面板等phpstudy工具,这里以小皮面板为例,打开网站根目录,将bjhgww文件复制到WWW/文件夹下,将数据库文件复制到MySQL的data文件夹下。打开WWW/data 下的config.php配置文件,将数据库账号密码修改为root、root,并找到网站后台地址为GuanLiZX。使用Navicat连接数据库,查找用户表,将密码的MD5值修改为123456的MD5。

qq_63651088的博客 1338

代码重构:改善服务器性能和可维护性

综上所述,通过代码重构、优化数据库查询、引入并发处理和代码优化,我们可以改善服务器端代码的性能和可维护性。持续地关注代码质量和性能,并进行适当的优化和测试,可以确保服务器端应用在高负载和复杂场景下的稳定运行。通过将这些重复代码块提取为独立的函数或方法,可以减少代码量,并提高代码的可读性和可维护性。可以使用专业的性能测试工具或编写自己的测试代码,模拟实际的负载情况并测量服务器的响应时间和吞吐量。异步编程:使用异步编程模型,例如使用异步IO或事件驱动的框架,可以充分利用服务器资源,并提高并发处理能力。

XsiJava的博客 187

服务器网站重构基础知识

本文将从网站取证基础概念、网站日志获取、网站数据库获取。这三部分知识点进行讲解。

m0_37867238的博客 2001

new delete 详解

常规的new 和 delete 当需要内存时,可以使用new申请内存,但在用完内存时应当使用delete 去归还内存,以防止内存泄漏,具体使用方案见下面代码: int* ps = new int ; // 使用new 申明变量空间 ... ... delete ps ; '// delete 删除所申明的变量空间 上述代码将删除ps 指针指向的内存空间,但不会删除指针本身,即仍然可以使用该指针去指向其他int 类型的变量。new 和 delete 一定需要成对的使用否则极易发生内存泄漏。 注意:不

qq_42138448的博客 6938

SAP VC实战:用CU01和CS02搞定BOM里的‘智能’对象相关性(附语法避坑指南)

在工业制造领域,产品配置的复杂性往往超出想象。想象一下,当客户需要定制一台工业设备时,可能有数百种配置选项相互影响——从基础材质到动力系统,从控制模块到安全装置。如何在SAP系统中优雅地管理这种复杂性?对象相关性(Object Dependencies)就是解决这一挑战的利器。

weixin_42524824的博客 467

03 服务端重构总结

花费了差不多1个多月的时间,任天赋、王帅琪和我三人功共同完成了隐私信息管理系统的前后端代码的重构工作。 其中,王帅琪独立完成了前端代码的重构工作,任天赋负责服务端代码中大部分“写”的操作以及与第三方平台对接的代码工作,我负责的是服务端代码中绝大部分与前端对接的“读”的操作以及与隐私合规平台预设规则对接的代码工作。 下面谈一谈我在进行重构过程中的体会和看法。 重构的原因 之所以进行重构,是因为之前的...

多啦的博客 1003

告别NEDC!手把手教你将CLTC/WLTP等最新工况文件导入AVL Cruise(附资源包)

本文详细指导如何将CLTC、WLTP等最新工况文件导入AVL Cruise软件,替代传统的NEDC工况。从资源获取、文件预处理到分步导入指南,再到常见问题排查,帮助工程师高效完成汽车仿真性能评估。附赠全球主流工况文件资源包,助力精准仿真分析。

weixin_30374009的博客 461

什么是重构

所谓重构(refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减少整理过程中引入错误的概率。本质上说,重构就是在代码写好之后改进它的设计。 “在代码写好之后改进它的设计”这种说法有点儿奇怪。在软件开发的大部分历史时期,大部分人相信应该先设计而后编码:首先得有一个良好得设...

CrazyTiger的博客 3万+

【教程4>第7章>第6节】基于FPGA的Viterbi维特比译码verilog实现——ACS加比选单元1

本文介绍了ACS加比选单元模块在FPGA中的实现过程,重点讲解了维特比译码中的ACS单元功能及其在硬件实现中的关键问题。文章首先概述了ACS单元在维特比译码中的作用,即通过计算和比较分支度量值来选择最优路径。接着,详细描述了FPGA实现中的分支度量值归一化处理策略,并指出了其存在的弊端。随后,文章提供了基于Verilog的ACS加比选单元模块代码,解释了其输入输出端口及工作流程。最后,总结了本小节内容,并预告了下一章节将涉及ACS顶层模块的开发与仿真测试。

FPGA/MATLAB学习教程/源码/项目合作开发 568

光电二极管探测器电流信号处理与指令输出系统

本文提出了一种基于Python的光电二极管电流信号处理系统设计方案。该系统能够实时采集、处理光电二极管输出的电流信号,并根据预设阈值输出控制指令。系统采用模块化架构,包含数据采集、信号处理、阈值检测、指令生成等核心模块。其中数据采集模块提供了模拟器实现和硬件接口框架,支持噪声模拟和脉冲信号生成。系统设计考虑了实时性、可靠性和可扩展性,适用于光强测量、光电检测等多种应用场景。

huanghm88的专栏 1180

AGP网关项目v0.3.12版本技术解析:多服务器支持与配置优化

AGP网关项目v0.3.12版本技术解析:多服务器支持与配置优化 AGP是一个专注于构建高性能网络代理和网关的开源项目,其核心设计目标是提供灵活、高效的网络通信解决方案。在最新发布的v0.3.12版本中,项目团队带来了两项重要改进:Python绑定的配置处理优化以及数据平面多服务器支持能力的增强。 Python绑定配置系统重构 本次更新对Python绑定部分的配置处理机制进行了深度优化。在分布式系...

gitblog_01368的博客 327

bevformer详解(3): 逐行代码讲解

在这篇文章中,我们将从BEVFormer算法代码入手,深入探究BEV转换的流程。BEVFormer是一种基于Transformer的BEV转换模型,其核心思想是利用自注意力机制和交叉注意力机制,从,并通过Object Query与BEV特征的交互,完成3D目标检测和地图分割等任务。https://developer.baidu.com/article/details/3224715bevformer的网络结构由三部分组成, 模型结构所示,其中的是部分,对于的是的结构,对于部分,沿用的中的decoder部分,

@bangbang的博客 3699

接手一个没有任何文档描述的项目

项目情况 最近有接到这样一个需求,第三方外包公司制作的一个网站程序,我要在基础上进行二开(可能是重构),因为老板和其他人员都完全不懂程序代码,所以只能提供一个阿里云的账号和短信验证码。 重点是这个半吊子项目目前还在线上运营,所以一切操作都不能影响到线上。 我的目的 搞清楚这个项目用的什么框架,看有没有相关文档可以参考 搞清楚项目的数据库相关参数,备份重要数据 把相关的代码文件和数据库文件进行备份...

u013787599的博客 1303

Dify 第 2 篇 Dify 插件离线安装

Dify是一个支持插件扩展的AI平台,其插件市场提供5种类型插件(模型、工具、Agent策略、扩展、插件包)。由于默认pip安装速度慢,可通过dify-plugin-repackaging工具将插件转换为离线包(使用阿里云镜像加速)。该工具提供两种方式:1)自备Python环境执行脚本;2)使用Docker环境(推荐)。脚本支持从Dify市场或GitHub下载插件,并重新打包为含依赖的离线包,便于通过"本地插件"方式快速安装。

甘蓝的专栏 1261

SWC_RTE01-AutoSAR架构【AutoSAR架构设计概述】

1 基于AutoSAR架构的概述 1.1架构层面:功能可以细分子功能,各个子功能需要交互。 -大功能可以通过Autosar组件Composition去表示; -各个子功能一般具有不可分割性,可以通过Autosar原子组件Component去表示; -各个子功能的交互可以通过接口去通信和交互; -各个子功能的行为可以通过内部行为去表示;具体表现为Runnable的设计;架构设计的时候不考虑具体的逻辑实现;只会关注Ruannble的触发事件或周期;数据访问的一致性问题;具体逻辑设计可通过模版c文件实现或通过基于

8450

重构性项目如何测试

一、初识重构 1.重构是什么?   代码重构是在不修改软件功能的情况下,对软件内部进行调整优化。 2.为什么要进行重构? 项目中的代码有明显的难以理解、难以修改的问题 在复杂度、重复率方面有严重的问题 重构可以把一些效率低的代码,重新调整成效率更高的代码 可以将重复提交的代码,为独立的函数 统一和规范变量名 3.重构的目标 通过更优秀更合理的架构来满足系统高性能、高并发、高可用的需求...

33的博客 2512

戴尔存储MD1400机柜维护操作与安全指导

内容概要:本文档详细介绍了戴尔存储MD1400机柜的安全注意事项、电源指示灯解释、故障排除方法以及硬件维护步骤,包括卸下和安装直流电源设备、硬盘驱动器和背板的具体操作流程。适用人群:IT运维人员、数据中心管理员和技术支持工程师。使用场景及目标:在维护和管理戴尔存储MD1400机柜时作为参考指南,确保正确安装和故障排查,避免安全隐患和设备损坏。其他说明:文档提供了丰富的图文指导,帮助使用者更好地理解和执行相关操作。

使用 Vue3 重构 Vue2 项目

2020年9月18日,vue3正式版发布了,前几天学习完成后,我决定重构后台管理项目,本篇文章给大家讲解了重构过程中遇到的一些问题和解决方案。 为什么要重构项目: 使代码更容易理解,方便后期维护,也就是要让每个模块的定位清晰明确 发现隐藏的代码缺陷 代码风格要优雅~,内容质量高,按照合理的设计模式和编程思想去重构 同步新的需求 项目功能交互来个极致体验,功能上要要尽量做到不卡顿 不闪退,要满足产品需求的细节 从长远来看,可以提高编程效率

weixin_62897746的博客 2140

(设备管理)基站设备外场测试规范.pdf

(设备管理)基站设备外场测试规范.pdf

H3CNE XMind思维导图.xmind

目录:OSPF计算机网络概述网络参考模型局域网基本原理广域网基本原理TCP/UDP原理IP基本原理命令行操作基础网络设备文件管理网络设备调试以太网交换机工作原理Vlan和Trunk生成树协议链路聚合交换机端口安全技术IP子网划分DNS文件传输协议DHCPVLAN间路由IPV6基础IP路由原理静态路由路由协议概述RIPPPPACL包过滤NAT

项目重构,新项目启动感悟、启发

一、为什么需要重构? 1)旧系统的开发语言或框架不再维护和更新,一些由底层技术或框架引起的问题无法修复,特别是影响到核心功能。 2)老板、高层领导和业务方有各种各样的新需求,但因旧系统的技术受限而难以实现。 新业务或功能通过旧系统的技术和框架无法实现,或者开发起来难度较高,耗费时间较长。如果继续在旧系统开发可能无法达到预期,并且投入的成本会较高。 3)系统遇到性能瓶颈,因为旧系统的底层技术和框架问题,难以再进行优化。 像电商系统,当做促销活动时,如618、双十一等活动,并发量较大,超出了平时的流量甚至翻倍,

wang18236618195的博客 2262

宽带数字接收机高清板杨小牛_宽带接收_matlab_宽带数字接收_宽带接收机_数字接收机_

利用matlab设计宽带高清数字接收机,代码实现

基于C++重构muduo网络库搭建HTTP服务器项目设计及反思

为什么要做muduo库呢?在后端开发中,服务器往往是基于如httplib库、muduo库等基础组件的基础上进行搭建的。选择重构muduo库,我们不仅可以借此机会了解网络库底层的实现逻辑以便于我们日后进行服务器的搭建,更重要的,我们可以学习muduo库中高效的事件驱动、多线程并发处理等优秀的设计理念。同时,可以加深我们对Epoll LT与ET模式、主从Reactor模式、非阻塞I/O读取、线程池,TCP、HTTP协议等等知识的巩固和掌握。在本项目中,我们将基于重构的muduo网络库搭建一个HTTP服务器件。

2301_76606232的博客 1767

为什么php项目用Java重构_PHP重构的意义和方法

运行了一两年的系统,用户量大增。没高兴几天,突然出了问题。服务器当机、数据库爆库、数据丢失。原有的技术人员解决不了,短时间内也很难招到合适的人来解决,怎么办?找PHP重构工坊,专注PHP重构多年,轻松帮您解决。首先,談谈重构的意义。在不改变软件的外部输入输出的情况下,优化内部的结构。“哎~你是不是多事啊?既然啥都不改变为什么要修改?还用个好听的名字叫重构?”重构当然不是多事了。用水桶去河里打的水,...

weixin_33781072的博客 1074

从混乱到清晰:Awesome MCP Servers大型项目重构实战指南

Model Context Protocol(MCP)是一个革命性的开源协议,它让AI模型能够通过标准化的服务器实现安全地与本地和远程资源交互。这个项目汇集了生产就绪和实验性的MCP服务器,通过文件访问、数据库连接、API集成和其他上下文服务来扩展AI能力。😊 ## 🚀 为什么需要重构大型项目? 在软件开发过程中,大型项目往往面临着代码结构混乱、依赖关系复杂、维护困难等挑战。Awesome

gitblog_01067的博客 635

软件定义和硬件重构知多少(二)

在软件定义篇中我们提到硬件重构是从互联网公司发起的,所以我们需要了解下互联网公司。互联网公司是云计算的推行者也是践行者,说起云计算就不得不说服务器和机柜,在大型互联网公司存储、服务器都是为特殊互联网业务定制。我们先从服务器定制开始说起。

Hardy 2125

SSH项目重构

1.Spring课程内容重点 1)理论 了解IOC和AOP概念 了解IOC(DI)和AOP(动态代理)原理 *2)熟练掌握Spring和Struts2,Hibernate整合应用 *3)掌握Spring事务管理应用 上面2,3建议采用注解的应用方式。 ==========首先完成下面两个案例=========== 1)利用Struts2...

u011432127的博客 488

Rust 项目实战:单线程 Web 服务器

Rust 项目实战:单线程 Web 服务器

ProgramNovice的博客 1639
上一篇: ConcurrentBag浅析
下一篇: 【面试】面试解答
It_sharp
博客等级 码龄10年 51粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值