首页 > 编程语言 >业务程序员不建议造轮子

业务程序员不建议造轮子

时间:2023-06-13 13:48:19浏览次数:39  
标签:建议 代码 tran 程序员 轮子 null BUG

不要问我是.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;
        }
    }
}

业务程序员不建议造轮子,但这是很矛盾的事。造轮子确实可以学到写业务代码学不到的技术。

标签:建议,代码,tran,程序员,轮子,null,BUG
From: https://www.cnblogs.com/s0611163/p/17477149.html

相关文章

  • 程序员35岁破局之路
    编者按:前段时间,LiveVideoStack采访了在音视频领域从业多年的技术人李天(化名)当35岁遇到裁员,他向我们讲述了在35岁遇到裁员时所面临的困境和感悟。这篇采访在音视频技术圈子里引起了一些反响。“程序员35岁危机”这个话题近几年来一直广受议论,LiveVideoStack最近又采访了三位音视频技......
  • 一位老程序员的忠告:别想着靠技术生存一辈子
    笔者目前是自己单干,但此前有多年在从事软件开发工作,回头想想自己,特别想对那些初学JAVA/DOT、NET技术的朋友说点心里话,希望我们的体会多少能给你们一些启发。 一、在一个地方工作8小时就是“穷” 在国内,你千万不要因为学习技术,就可以换来稳定的生活和高的薪水待遇......
  • 【建议收藏】Log4j配置详解
    大家在日常开发中必然会使用到日志组件,Log4j是Java方向上比较常用的日志组件,今天给大家分享下Log4j支持的配置项,强烈建议收藏,以便配置时查看#展示log4j各种配置,私有部分见文件中注释,公有部分详细注释见文件最后log4j.rootLogger=DEBUG,console,file,rolling,daily,DATABASE......
  • 每个优秀程序员都应遵循的代码原则和规范
    什么是优秀的程序员?首先我们会先提出这个问题,如果你向10个人问这个问题,尽管可能答案不同,但是少有一点应该是一致的。而对我个人而言,一个优秀的程序员应该是一个能够充分理解需求,并能提出可行性解决方案通过团队协作向最终用户展示成果。而说到团队协作,就涉及到代码的可维护性,那么......
  • 程序员必备技能-怎样快速接手一个项目
    作为一个程序员,我们很少能从头到尾参与一个新项目的开发。如果你经常开发的是新项目,那你真是太幸福了。更多的情况是半路进入一个项目组进行开发,或者是有其他同事离职了,之前由他维护的系统转交给你维护。还有一种情况就是领导不知道从哪里弄过来一个系统和一堆文档,然后就直接就把系......
  • 美女程序员:仅有30天,该怎么准备?
    你好,我是田哥昨天,一个美女同学私信我,现在想下个月就去面试,现在该如何准备面试,如何快速复习。下面,我来说一下我的看法。了解情况第一步,肯定是要了解自己的情况,不能随便说说你怎么怎么快速复习。要结合自己的技术栈来。针对性得来安排,而不是一概而论。比如说,你在项目中用过Spring、S......
  • 年后面试,给你提6点建议!
    你好,我是田哥转眼年底,很大部分人都在观望,甚至已经开始着手准备明年的面试了,不知道屏幕前的你是如何打算的?从现在开始,到明年三月份还有两个多月的时间,时间不多,但也不少了。只要自己好好准备,明年肯定有收获的。如何准备,准备哪些?我给你总结了6个方面:简历问题自我介绍问题项目介绍问题......
  • 常见漏洞简介 防御建议
    BurtForce(暴力破解漏洞)概述:连续性尝试+字典+自动化(攻击者在不知道目标账号和密码的情况下进行尝试性的登录,在这个尝试的过程中,会使用一些自动化的工具和一个特定的字典,比如一个账号密码库,实现一个高效的自动化的连续的尝试性登录,从而得到一些有效的账户和密码)字典:一个有效的......
  • 程序员减少BUG的两个小妙招!
    原创:陶朱公Boy(微信公众号ID:taozhugongboy),欢迎分享,转载请保留出处。​点评:我们说衡量一个程序员水平的高低往往有很多因素,但有一个因素至关重要即代码质量。如果程序员写的功能在测试阶段就被频繁打回,上线了之后,用户反馈这里有问题那里有问题,大家可以想像这样的程序员水平能......
  • g4d/g4e反馈问题、提出建议须知
    为了便于g4d/g4e开发者更快地重现、定位问题,请大家反馈问题的时候,尽可能提供足够的相关信息,主要有:1、你所用的g4d/g4e的版本号是什么?2、你所用的g4d/g4e的主菜单是怎样的?3、使用过程中发现了什么问题,最好提供问题的截图,图文并茂,“一图胜千文”!4、你发现是从g4d/g4e的哪个版本......