登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
当2个项目中出现了只有一个方法的相同代码时,要不要单 ...
当2个项目中出现了只有一个方法的相同代码时,要不要单独建一个项目来消除重复代码
[ 复制链接 ]
焦听云
2025-5-29 19:38:18
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
最近碰到一个这样的问题,有两个Solution,它们之间在数据层上有一定的联系,简单说就是B项目为A项目提供录入数据的功能,功能上它们两个各有分工,代码暂时也没有耦合,但都出现了一个验证某数据的要求,这个算法是相同的。我的第一反应是肯定要独立出一个Project,单独有一个类,里面有这个验证方法。然后2个Solution分别引入此Project。但我讲出这个想法,团队最后予以否定,说是如果有更多相同的类似验证数据的代码可以重用时再这样做,现在不是最佳时机(可以理解为可重用的太少了,等再多一点再做,或者是如果现在做会拖慢进度之类的)。
这反应出我一个特点,就是对代码质量的要求很苛刻。在生活中也可以体现出来,头上有个灯坏了,一闪一闪的,有些人可以永远忍受,我就不行,即使它闪的不是很厉害,我也受不了,我很奇怪为什么别人都能受得了。
绝对不允许有重复代码是敏捷开发中重要的原则,团队中也有人学了敏捷开发,可为何不站出来支持我呢?在讨论中出现了另外一个问题,假如2个项目中重用此代码,应该用ClassLibrary还是用WebService,下面我一并列出我的观点:
1. 首先一定要重用可以重用的代码。因为重复代码是维护的大敌,当不重用时,如果算法有某些修改,那么我们不得不同时改2个地方,即使算法没有修改,但是实现这个算法的代码自身有缺陷,那么也要同时改2个地方。(事后也证明,实现此算法的代码确实有缺陷,它没有预防可以避免的异常。)
2. 把这个相同的代码摘出来,放到一个单独的Project里,绝不会拖慢进度。有点经验的都应该明白,这个工作只不过3分钟的事儿。
3. 任何一个需求(特别是数据验证的任务),即使现在确实是只有一个,但都不应该看成一成不变的,应该看成有可能不断增加的。当不单独提出来时,每增加一个就要同时在2个地方加代码,既然有很大的把握可以预知未来一定会增加需求,为何不现在就积极准备呢?何况这2个Solution是有内在联系的,它们共同引用一个库是非常非常合理的,并没有增加它们之间的耦合度。
4. 如果重用应该用ClassLibrary。理由是WebService是比较Big的方案。首先,我们知道WebService最佳的应用是跨平台、穿越防火墙,但现在这2个项目是运行在同一局域网中的,WebService的优势完全用不上。第二,WebService在布署上比ClassLibrary复杂,主要是因为它的配置复杂,首先要有个WebSite来承载这个服务,它的地址和端口号需要配置进用到它的应用中去(假设按照代码类的方式访问),一旦改变了,就要改配置(针对现在的情况,要改2个地方的配置)。第三,WebService的性能不好,用在这里没有用牺牲一点性能换到任何一点好处,哦,唯一的好处是算法变了,可以只改一个地方,可是你们也说了,算法99%是不会变的。再看如果算法增加了的情况,比如新增了一个验证需求的时候,我们可以看到,用ClassLibrary或WebService工作量是一样的,都要重新布署3个地方(一个WebService,和两个用它的项目),即WebService也没有比ClassLibrary有任何的优势。
5. 还是像原来一样,我觉得现在的团队对“变化”的态度太保守了,我不明白为何这样显而易见的问题也要开会讨论,最后还得出一个“维持现状”的结论。我对现在团队越来越失望了。
也许有些人觉得我小题大作了,可我觉得高楼大厦都是由一砖一瓦盖起来的,我们必须重视一砖一瓦,而不是成天炫耀,我们用了什么什么模式,什么什么框架,这些号称“柱子”的东西。你们说对吗?
------------------------------
看了评论,发现漏说了一点,即WebService与重复代码的关系。我的理解是这样的(假设都用代理类来访问):
1. 当两个项目都访问同一WebService必然存在重复代码,即代理类本身,虽然它可以自动生成,不用我们管,但它确实是重复代码
。
2. 另外访问WebService的2个项目都有重复的对WebService地址的配置信息,如果地址变了,就不得不改2个地方。
我之所以说WebService是个Big的方案,就包含有以上原因。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
代码
消除
项目
一个
单独
相关帖子
制造行业项目管理工具选型经验分享(简直是高效选型指南,少走弯路)
Open-AutoGLM项目衍生自研app测试思路
一个完全由大模型AI Coding开发而成的程序员工具网站
Python - UV 为每个项目创建独立、干净的Python工作空间
你的代码正在腐烂:为什么我们都不敢碰那座“屎山”?
强壳保护NET代码!Dnguard 4.9.4最新企业旗舰版下载地址
吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 课后习题和代码实践
从项目成果到职业晋升:项目经理年终总结的高效撰写法
一天一个Python库:NumPy - 科学计算的基石
go项目使用go build 与 MakeFile 构建项目
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
制造行业项目管理工具选型经验分享(简直是高效选型指南,少走弯路)
0
521
都硎唷
2025-12-15
安全
Open-AutoGLM项目衍生自研app测试思路
1
975
施婉秀
2025-12-16
业界
一个完全由大模型AI Coding开发而成的程序员工具网站
0
483
龙梨丝
2025-12-17
业界
Python - UV 为每个项目创建独立、干净的Python工作空间
0
816
匝抽
2025-12-18
业界
你的代码正在腐烂:为什么我们都不敢碰那座“屎山”?
1
619
蟠鲤
2025-12-18
业界
强壳保护NET代码!Dnguard 4.9.4最新企业旗舰版下载地址
1
772
庞悦
2025-12-19
业界
吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 课后习题和代码实践
0
81
句惫
2025-12-19
安全
从项目成果到职业晋升:项目经理年终总结的高效撰写法
0
761
栓汨渎
2025-12-19
业界
一天一个Python库:NumPy - 科学计算的基石
0
848
账暴
2025-12-21
业界
go项目使用go build 与 MakeFile 构建项目
0
622
杓疠?
2025-12-21
回复
(3)
左丘雅秀
2025-11-5 03:10:52
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
蚬蕞遂
2025-11-19 02:04:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
掳诚
2025-11-29 09:09:21
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
焦听云
2025-11-29 09:09:21
关注
0
粉丝关注
28
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9981
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9950
查看更多
今日好文热榜
594
《痞子衡嵌入式半月刊》 第 120 期
622
go项目使用go build 与 MakeFile 构建项目
762
监控指标与容量预警——延迟、命中率、慢查
673
2026 年别墅防水服务商 TOP5 推荐:高端住
963
MAUI库推荐二:MPowerKit
962
.NET10 New feature 新增功能介绍-JIT编译
404
报考陪诊师选守嘉陪诊的理由
272
C#AI系列(7):从零开始LLM之Tokenizer实现
284
C#AI系列(7):从零开始LLM之Tokenizer实现
826
Pytest 测试用例自动生成:接口自动化进阶
848
一天一个Python库:NumPy - 科学计算的基石
14
FFmpeg 内存输入&输出
745
一文读懂RAG架构如何助力AI
500
一文读懂RAG架构如何助力AI
549
ROS2之TF介绍
400
SW 随笔 001 — InlineArray 带你飞(Since
693
当遇见 CatchAdmin V5-模块化设计重新定义
495
【有手就行】SWIFT:花20分钟把大模型的名
562
论文速读记录 | 2025.12(2)
376
浮点数的本质:为什么计算机无法精确表示0.