系统背景:1.c++100~150万行源代码。CS体系结构。CAE,CAM类型的桌面程序。
2.历时4年×20人开发周期。
3.产品开发,距发布还有1年。
重构背景:
当我负责重构整个系统的几何算法库的时候,发现我们系统里有一个用来表示几何二维点Point2d的类,用来表示Point2d几何相关的逻辑。
单纯几何逻辑不应该包括下面代码的name, attributes,2D几何点不应该包括z.
class Point2d
{
public double x;
public double y;
public double
z;
public String
name;
public Map<String, String>
attributes;
}
随着时间的推移,越多的属性被添加进去,很明显点这个类承担了过多的职责。这个类被大量使用。在不同语境下有不同的物理含义,比如"标注点", 三维点,等等。
重构过程我认为是异常复杂的。
方案一:
将Point2d换个名字,用来表示混乱逻辑的2D点。新建一个纯几何意义的2D点。新的代码尽量使用新的数据结构。这样做的好处是隔离了系统继续耦合的趋势。但是,这种做法多了,会对系统的可理解性造成致命伤害。想象一下,你想用一个几何点的时候,你有多个选择是多么恐怖的场景。实际上,我们系统已经有了不同的三套几何算法库了,相当混乱。
方案二:
其实我是没有其他方案了,也许你会说分别修改所有引用点,根据使用,建立新的点类,最终去掉原有Point2d类多余的属性和职责。但是系统是巨大的(100~150万行),引用的地方怎样使用我单独去看,是看不明白的。另外,没有单元测试可以保证我的修改是正确的。先写所有单元测试也不是现实的,当然,我不太期望我重构时系统不会引入我误操作的Bug。
我想这个问题的解决方案应该不仅是技术上的,还应该从时间安排,重构的过程控制,团队的分工来思考。各位大虾,来点头脑风暴,发表自己的高见吧。
P.S.
1.上面代码为伪代码,实际系统是c++组成的。
2.将把您的建议实施,并反馈重构过程和结果。
重构进度
1.2011-01-11
过程:对name, attributes, z添加get,set函数。用时4个小时。
问题:由于系统重构中,原有功能有些不能用,所以部分人没有更新代码,他们新添加的代码有可能出错。
2.2011-01-12
过程:今天大家都提到了提取出纯几何意义的父类。其实这个想法和我的方案一应该是一个意思。弊端上面也描述了。
今天我打算先去掉一两个和三维点有关的函数,将其引用处改为三维点。
附上我们几何库的2D核心类图。
- 大小: 45.8 KB
分享到:
相关推荐
《大型应用系统架构》不仅为读者提供了坚实的理论基础,更重要的是教会了如何将这些理论应用于实践中,解决真实世界中的挑战。无论是对于刚接触这一领域的新人,还是已经有一定经验的专业人士来说,都是一本不可多得...
### 大型网吧网络系统设计方案解析 #### 一、引言 随着互联网技术的迅猛发展,大型网吧作为集娱乐、休闲...随着技术的不断进步,未来的大型网吧网络系统设计还将面临更多挑战与机遇,持续优化与创新将是不变的主题。
在构建一个大型购物系统时,我们面临的是一个复杂的IT挑战,需要综合运用多种技术和策略来确保系统的高效、稳定和安全。以下是对这个大型购物系统的一些关键知识点的详细说明: 1. **架构设计**:大型购物系统通常...
在大型应用系统设计中,尤其是针对像微博这样的高并发、高可靠性、高性能的平台,系统安全设计至关重要。本文档主要围绕以下几个方面展开讨论: 首先,微博平台所面临的挑战包括高并发流量、对高可靠性和高性能的...
大型系统的架构通常需要考虑到海量的网络访问和海量数据存储这两个要素。海量的网络访问意味着系统需要能够处理上亿次的页面浏览量(Page Views,简称PV)。而海量数据存储则要求系统能够保存和高效检索大量的数据,...
分布式事务处理,例如两阶段提交和补偿事务模型,也是大型网站系统必须面对的挑战。 负载均衡技术如Nginx和HAProxy,以及集群和分布式计算框架Hadoop和Spark的使用,能够帮助构建可扩展的系统,实现资源的有效利用...
1. **高并发处理**:如何有效地处理海量用户的并发请求,是大型网站系统面临的一个重大挑战。 2. **数据一致性**:在分布式环境下保持数据的一致性是一项复杂的任务。 3. **性能优化**:包括前端优化、数据库优化等...
分布式事务处理是大型网站系统中的挑战之一。JAVA中间件如Atomikos、Seata提供了分布式事务解决方案,确保跨多个数据库或服务的事务一致性。 八、微服务架构 随着业务复杂性的增加,微服务架构成为趋势。JAVA的...
此外,还有分布式缓存、分布式文件系统、分布式计算等技术,以应对海量数据和高并发挑战。 四、性能优化 - **负载均衡**:通过负载均衡器将请求分发到多个服务器,避免单一节点过载。 - **缓存策略**:利用内存缓存...
Java大型架构设计主要涵盖的是构建高可用、高性能、可扩展的分布式系统的技术和实践,这在互联网行业中至关重要。三本书分别关注大型分布式网站架构设计、大型网站系统与Java中间件的实践以及分布式Java应用的基础与...
这本书详细介绍了如何利用Java技术栈解决在开发和运维大型网站过程中遇到的各种挑战,旨在帮助读者理解并掌握Java中间件的核心原理与实践技巧。 在大型网站系统的构建中,Java中间件起着至关重要的作用。它们为高...
为了应对这些挑战,国家提出了一些重点项目,比如“电力监控系统网络安全监测关键技术研究与示范应用”。这些项目要求500kV以上电压等级的大型水电站建设态势感知系统,部署网络安全监测厂站终端,并对现有电力监控...
2. **Java中间件**:Java中间件是构建大型系统的重要工具,包括但不限于Web服务器(如Tomcat)、应用服务器(如Jetty、JBoss)、消息队列(如RabbitMQ、Kafka)、缓存系统(如Redis、Memcached)、数据库(如MySQL、...
《C++大型仓库管理系统应用详解》 在信息技术日益发达的今天,仓库管理系统的应用已经渗透到各行各业,有效地提升了物流效率,降低了库存成本。本篇将深入探讨如何利用C++编程语言构建一个大型仓库管理系统,并结合...
大型电商平台通常面临以下挑战: - **海量数据处理**:每天产生的交易记录、用户行为数据等数量庞大。 - **高并发访问**:特别是在促销活动期间,需要应对瞬间激增的用户流量。 - **实时性要求**:例如库存管理、...
【大型网站系统与Java中间件实践读书笔记(二)】 大型网站系统是指处理海量数据、应对高并发访问、以及应对复杂业务逻辑的网络...通过合理选择和设计中间件,可以有效解决大型网站面临的挑战,实现稳定、高效的运行。