论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
安全
›
网络安全
›
业务程序员不建议造轮子
业务程序员不建议造轮子
十念
论坛元老
|
2023-6-13 20:30:39
|
显示全部楼层
|
阅读模式
楼主
主题
1036
|
帖子
1036
|
积分
3108
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
不要问我是.net程序员还是java程序员,我是业务程序员。
工作多年,我觉得业务程序员,不应该造轮子。
多年以前,我就吃过造轮子的亏,有时,我工作大概60%的时间在造轮子、改轮子的BUG,40%的时间在写业务功能。
为什么要造轮子呢,为了学技术,为了不认输。但是造轮子的代价很大,也影响工作,写着业务代码呢,突然出现BUG,而且是轮子的BUG,程序跑不下去了,然后去改轮子的BUG,很浪费时间。
业务代码有BUG很正常,随手就改了。但轮子最好不要有BUG,因为容易坑人。
但BUG总是存在的,怎么才能尽量避免BUG呢?要有完善的单元测试。怎么才能及时发现BUG呢?要有一定的用户量。
但是我的单元测试不够专业不够完善,也没有什么用户,我总结出来一些适合我自己的经验,只要不写代码,就没有BUG,只要代码写的少,BUG就少,所以,我把脏活扔了,把它降级为一个Dapper扩展。即便如此,依然付出了很多时间代价,也非常折腾人。
前两天,发现了一个严重BUG,然后修改后重新发布了。本着负责的态度,觉得这个BUG比较严重,把自己不再维护的旧库也修复重新发布了。但新旧多个版本的维护真的很累人。
单元测试、其它测试工程都测试通过了,又静态检查了代码,觉得没有问题了。可是,使用该轮子的业务代码居然又报错了,是轮子的错误。然后修改重新发布,把各种流程又走了一遍,好在不再维护的旧库没有这个问题,省了一些时间。
这个BUG有点意思,单元测试考虑到了,但没有测出来,如果是业务代码,可能完全没有问题,但轮子要考虑各种情况。
有BUG的代码如下:
/// <summary>
/// 提交事务
/// </summary>
public void CommitTransaction()
{
if (_tran == null) return; //防止重复提交
try
{
_tran.Commit();
}
catch
{
RollbackTransaction();
throw;
}
finally
{
if (_tran != null)
{
if (_tran.Connection.State != ConnectionState.Closed) _tran.Connection.Close();
_tran.Dispose();
_tran = null;
}
}
}
复制代码
我的单元测试代码使用的是MySql.Data库,没有问题。但我的项目中使用的库是MySqlConnector库,报空指针异常,因为MySqlConnector库,成功提交事务后,事务的Connection属性就被置为null了。修复后的代码如下:
/// <summary>
/// 事务关联的数据库连接
/// </summary>
private DbConnection _connForTran;
/// <summary>
/// 开始事务
/// </summary>
public DbTransaction BeginTransaction()
{
var conn = GetConnection();
if (conn.State == ConnectionState.Closed) conn.Open();
_tran = conn.BeginTransaction();
_connForTran = _tran.Connection;
return _tran;
}
/// <summary>
/// 提交事务
/// </summary>
public void CommitTransaction()
{
if (_tran == null) return; //防止重复提交
try
{
_tran.Commit();
}
catch
{
RollbackTransaction();
throw;
}
finally
{
if (_tran != null)
{
if (_connForTran != null)
{
if (_connForTran.State != ConnectionState.Closed) _connForTran.Close();
_connForTran = null;
}
_tran.Dispose();
_tran = null;
}
}
}
复制代码
业务程序员不建议造轮子,但这是很矛盾的事。造轮子确实可以学到写业务代码学不到的技术。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
十念
论坛元老
这个人很懒什么都没写!
楼主热帖
Velero系列文章(四):使用Velero进行 ...
Kali Linux利用MSF入侵安卓手机(小白版 ...
SonarQube安全扫描
C/C++函数的调用约定详解
Android Studio 实现登录注册-源代码 ...
三天吃透Kafka面试八股文
微光互联 TX800-U 扫码器无法输出中文 ...
xmrig挖矿样本分析 miner
ENVI无缝镶嵌、拼接栅格数据的方法 ...
【图书管理系统】Servlet+JSP+MySql 实 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
云原生
Mysql
MES
物联网
快速回复
返回顶部
返回列表