当前位置: 首页 > news >正文

[重构心得] 接一个烂Project怎么办

在软件行业对于做项目的公司来说,接手一个别人做的project(通常你会认为很烂)是很正常的,本篇文章简单的谈一谈接手project(以.NET,JAVA为例)的几点心得。


当你接手一个project时,目的只有一个,如何使它变得可控。
1. 理解所有功能点,并知道如何测试每一个功能点(使用工具如Postman),对于没有单元测试的project来说,需要手动测试。
2. 阅读代码。在阅读过程中,可以用resharper这样的重构工具来正确的命名变量,函数等等。
3. 如果代码是过程式设计,需要使用抽象代替过程。需要使用抽象手段(抽象类和接口为出发点)对业务逻辑部分建模。找出可封装部分,考虑使用流畅接口等技术进行封装。
4. 如果代码烂到直接把SQL写在了C#或JAVA里,或者上百个存储过程。这时就要用ORM重写(我接到了不止一个这样的project)。另外,我个人的观点,任何逻辑都不应该放在数据库里(存储过程,数据库函数,触发器等等)。
5. 如果需要的话,对表示层(Presentation)重构,MVC,MVP都可以,看团队的技术偏好。
6. 依赖注入(DI)。重构差不多了就要可测试性了。确保整个project的核心功能都是可测试的,考虑使用xunit,nunit这样的框架来写测试。
7. 系统健壮性。对web服务层定义一套的错误码(如200-299表示正常,300-399客户端错误,400-499身份验证错误,500-599服务器错误等等)。log信息:多加入系统业务的描述,而不是每次都把整个Exception的stacktrace放进去就完了。




以上步骤做完,项目的代码逻辑,测试以及错误追踪方面基本都可控了。当然,在一些糟糕的情况下重构难度会更高,例如project功能还没做完,还在赶还在改,还需要给客户展示。这时
1.继续现有的project,切勿一次重构太多,每改一点做一轮测试。
2.考虑创建一个新的(可以理解为重做)项目。一个是rush版本,一个是clean的。

相关文章:

  • CentOS 5.1 做NAT代理,实现封迅雷,BT,pplive.
  • C# 中的Retry 模型
  • Apple应用消息通知 swift前端c#后端
  • MySQL数据库灾难恢复
  • 使用C# Diagnostics.DebuggerDisplay属性提高调试信息可读性
  • PDI简单介绍之ETL工具-----spoon
  • python flask web环境配置步骤
  • python flask SQLAlchemy 的用法
  • Blog须知
  • Azure VM Scalable Sets -- 适用IAAS架构
  • 数据库设计技巧14则
  • 一张图说明HTTPS 握手过程
  • linux-2.6.26内核中ARM中断实现详解(1)
  • 创建Azure scheduler完成日常任务
  • (TipsTricks)用客户端模板精简JavaScript代码
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【译】理解JavaScript:new 关键字
  • 345-反转字符串中的元音字母
  • Angularjs之国际化
  • canvas绘制圆角头像
  • Codepen 每日精选(2018-3-25)
  • express.js的介绍及使用
  • extract-text-webpack-plugin用法
  • k8s如何管理Pod
  • leetcode讲解--894. All Possible Full Binary Trees
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PV统计优化设计
  • Spring-boot 启动时碰到的错误
  • SpringBoot几种定时任务的实现方式
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从零开始的无人驾驶 1
  • 从伪并行的 Python 多线程说起
  • 区块链将重新定义世界
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 用jquery写贪吃蛇
  • - 转 Ext2.0 form使用实例
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Python 之网络式编程
  • ​香农与信息论三大定律
  • ​学习一下,什么是预包装食品?​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #define与typedef区别
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (LeetCode 49)Anagrams
  • (Note)C++中的继承方式
  • (六)激光线扫描-三维重建
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)