Questions tagged «code-reuse»

使用现有代码创建新软件。


6
在C语言中,代码复制是否必不可少?
我是C的新手,我想知道在编写通用数据结构和C时,代码重复是否必不可少? hash map例如,我可以尝试编写一个通用实现,但是我总是发现最终结果很混乱。我还可以针对此特定用例编写专门的实现,使代码清晰易读,易于调试。后者当然会导致某些代码重复。 通用实现是规范,还是针对每个用例编写不同的实现?

9
如何促进代码重用和文档编制?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 作为大约10个以上开发人员的团队负责人,我想促进代码重用。我们编写了很多代码-在过去几年中,很多代码都是重复的。现在的问题是,其中许多代码只是其他代码的重复或它们的微小变化。 我已经开始了关于如何将代码制成组件的运动(讨论),以便可以将它们重新用于将来的项目,但是问题是,我担心那些不了解组件的新开发人员或其他开发人员会继续前进,并且写自己的东西。 无论如何,有没有提醒开发人员重用组件/改进文档/为基础组件做贡献,而不是复制现有代码并对其进行调整或编写自己的代码? 如何使组件易于发现,易于使用,以便每个人都可以使用它? 我认为每个开发人员都知道可重用组件的好处,并想使用它们,只是我们不知道如何使它们可被发现。同样,开发人员在编写代码时,知道应该编写可重用的代码,但缺乏这样做的动力。
16 code-reuse 

4
“不要重新发明轮子”会忽略人类记忆的局限性吗?
在Haskell和F#中工作的一件事告诉我,一个比我聪明的大学里的某人可能已经找到了我所做工作的抽象。同样在C#和面向对象的编程中,无论我在做什么,都可能有一个“ it”库。 我非常强调在编程中重用抽象,这使我经常感到两难之间:1)自己编写简短又肮脏的东西; 2)花相同的时间找到别人更健壮的库/解决方案,然后再使用它。 像最近一样,这里的一位编码人员为CSV文件编写了一个(反)序列化器,我忍不住想起来,如果.NET标准尚未提供,那么在网上很容易找到这样的内容蜜蜂。 不过,我不怪他,在.NET中工作了好几次,我根据我所知道的方法修补了一个解决方案,只是意识到通常在同一个库中有一些方法调用或对象之类的东西 ,它们做了什么我想要,但我不知道。 这仅仅是经验不足的征兆,还是在编写新内容和重用旧内容之间总要权衡取舍?我最讨厌的是遇到一个我已经知道并忘记的解决方案时。我觉得现在一个人无法消化大多数语言预打包的大量代码。

2
当应用的某些部分用不同的语言编写时,如何避免数据结构重复?
例如,假设您正在用Java编写应用程序。 您的应用程序与使用Python编写的API服务器进行通信。 Python服务器与SQL数据库进行通信。 您还拥有一个用JavaScript编写的应用程序网站。 使用4种不同的语言,很容易以4次不同的时间重复基本相同的数据结构。 例如,User类型可能看起来像这样(伪代码): type User { integer id; string name; timestamp birthday; } 项目的每个部分都需要某种形式的表示User。Java和Python部分将需要两个不同的class声明。数据库将需要一个User表声明。前端站点也需要代表一个站点User。 重复此类型4次确实违反了“ 请勿重复自己”原则。还有一个问题是,如果User更改了类型,则需要在项目的每个不同部分中重复这些更改。 我知道Google的protobuf库为该问题提供了一种解决方案,您可以使用特殊的语法编写数据结构,然后该库以多种不同的编程语言为您生成结构声明。但这仍然没有解决必须为您的类型重复验证逻辑的问题。 是否有人对此有任何建议或链接到书籍/博客文章?

8
使用一种可以在客户之间变化的方法对类进行正确的设计
我有一个用于处理客户付款的类。除了一个类(用于计算(例如)客户的用户欠款额的)方法外,对于每个客户而言,此类中的一种方法均是相同的。各个客户之间的差异可能很大,并且由于存在许多自定义因素,因此没有简单的方法来捕获诸如属性文件之类的计算逻辑。 我可以编写难看的代码,以根据customerID进行切换: switch(customerID) { case 101: .. do calculations for customer 101 case 102: .. do calculations for customer 102 case 103: .. do calculations for customer 103 etc } 但这需要在我们每次获得新客户时都重新构建班级。有什么更好的方法? [编辑]“重复”的文章完全不同。我不是在问如何避免使用switch语句,而是在寻求最适合这种情况的现代设计-如果我想编写恐龙代码,可以使用switch语句解决。此处提供的示例是通用的,无济于事,因为它们本质上是在说“嘿,在某些情况下,此开关工作得很好,而在另一些情况下,则效果很好。” [编辑]我决定采用排名靠前的答案(为实现标准接口的每个客户创建一个单独的“客户”类),原因如下: 一致性:我可以创建一个接口,以确保所有Customer类都可以接收并返回相同的输出,即使是由其他开发人员创建的 可维护性:所有代码都使用相同的语言(Java)编写,因此无需其他任何人学习单独的编码语言来维护应该是简陋的功能。 重用:如果在代码中出现了类似的问题,我可以重用Customer类来容纳许多方法来实现“自定义”逻辑。 熟悉:我已经知道如何执行此操作,因此我可以快速完成它,然后继续处理其他更紧迫的问题。 缺点: 每个新客户都需要编译新的Customer类,这可能会增加我们编译和部署更改的方式的复杂性。 每个新客户都必须由开发人员添加-支持人员不能只是将逻辑添加到属性文件之类的东西中。这不是理想的选择……但是后来我也不确定支持人员将如何写出必要的业务逻辑,尤其是当它很复杂且有很多例外时(很可能)。 如果我们增加许多新客户,它将无法很好地扩展。这是不期望的,但是如果确实发生了,我们将不得不重新考虑代码的许多其他部分以及这一部分。 对于您感兴趣的人,可以使用Java Reflection按名称调用类: Payment payment = getPaymentFromSomewhere(); try { String …

3
是否有软件工程原理将生产系统上的重用和回归测试成本联系起来?
我曾为一家负责退休金和投资银行的大型金融交易系统工作。经过15年的功能更改,手动回归测试成本已攀升至每个版本20万美元。(1000万本金,每天交易1000万美元)。该系统还与公司周围的其他19个系统对接,可移动大量数据。该系统是用Java实现的。 但是,我们观察到的是,我们做的“重用”越多,回归测试的成本就越高。(原因是您需要“测试您触摸过的代码”-并且重用/共享的代码在触摸时会影响多个地方。因此尽管“干-不要重复自己”-即不要复制和粘贴代码-我们注意到复制和粘贴代码的经济动机。这是为了降低回归测试的成本,因为我们不想修改可以共享的代码,因为这会带来很大的回归测试影响。 我的问题是,是否存在描述重复使用和回归测试成本之间关系的软件工程原理? 我问这个问题的原因是,将系统分解成要测试的较小部分可以说具有成本优势。 假设: “回归测试”指的是“验收测试”,即另一个小组花时间代表企业针对系统编写新的测试和重用旧的测试,包括环境和数据设置。 我知道对大型回归测试成本的下意识反应是“更多自动化测试”。这是一个好原则。在这种环境下,存在两个挑战。 (a)自动化测试在系统边界上的用处不大,除非该系统也具有很高的自动化测试覆盖率。(势力范围挑战)。 (b)从文化上讲,当您的系统已经很大且很复杂时,很难在程序员的时间上获得动力,或者在高度自动化的测试覆盖率上进行资本投资。 (c)维护自动化测试的成本隐藏在项目中,因此很容易在项目级别将其丢弃。 (d)这只是在银行工作的文化现实。 (e)我正在以不同的方式(分解)解决此问题。

5
代码重复与多负责任的方法
我尝试遵循“单一职责原则”(SRP),并且也省略代码重复。但是,通常在某些地方存在代码重复,这些代码重复不过是调用的代码块,这些代码块无法将其提取到至少有意义的命名方法中: DoAction1(); DoAction2(); if (value) DoAction3(); DoAction4(); 将此类代码提取到方法中的最佳方法是什么?如何命名?

2
什么是“代码偏斜”?
在有关Scala的O'Reilly书中,我读到代码的复制粘贴会创建: ...造成代码膨胀,可维护性和偏斜的问题, 我在上下文中看不到“歪斜”一词的任何明显定义。我知道复制粘贴的问题,但是我无法使它们适合“歪斜”一词。因为这是O'Reilly的书中使用的,所以我猜想它是循环中真正的编程术语。 有指针吗?

2
防御软件重用系统(DSRS)发生了什么事?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我一直在阅读90年代初关于美国国防部软件重用计划(称为“国防软件重用系统”(DSRS))的一些 论文。我最近发现的内容是2000年的一篇论文- 《软件重用存储库概览》 国防软件存储系统(DSRS) DSRS是用于存储和检索可重用软件资产(RSA)的自动化存储库[14]。DSRS软件现在在七个软件重用支持中心(SRSC)管理可重用资产的清单。DSRS是高质量RSA的中央收集点,并通过为开发人员提供机会使其需求与现有软件产品相匹配来促进软件重用。目前支持政府项目的政府雇员和承包商人员可以使用DSRS帐户... ... DoD软件社区正在尝试将其软件工程模型从当前的软件周期更改为过程驱动的,特定于领域的,基于体系结构的,由存储库辅助的构建软件的方式[15]。在这个不断变化的环境中,DSRS具有成为DoD标准重用存储库的最大潜力,因为它是现有的唯一已部署的,可操作的存储库,在整个DoD中具有多个可互操作的位置。DSRS的七个位置支持近1,000个用户,并列出了近9,000个可重复使用的资产。仅DISA DSRS列出3,880个可重用资产,并拥有400个用户帐户... DSRS的长期策略是支持虚拟存储库。这些互连的存储库将提供跨域以及在服务之间定位和共享可重用组件的能力。有效且不断发展的DSRS是DoD软件重用计划成功的核心要求。不断变化的DoD存储库要求要求DISA继续拥有可操作的DSRS站点,以支持实际存储库操作中的测试并支持DoD用户。DSRS的分类过程是提供客户支持的基本技术[16]。此过程是使可重用资产可用于实施功能和技术迁移策略的第一步。 ... [14] DSRS -国防技术适应性强,可靠的系统 网址:http://ssed1.ims.disa.mil/srp/dsrspage.html [15]明星-软件技术适应性强,可靠的系统 网址:HTTP: //www.stars.ballston.paramax.com/index.html [16] DE Perry和SS Popovitch,“询问:基于谓词的使用和重用” ,在第八届基于知识的软件工程会议论文集中,第pp。 144-151,1993年9月 。... DSRS已死,是否有任何事后报告?是否还有其他最近的美国政府举措或有关软件重用的报告?

5
如何处理代码重用的哲学?
在开始新项目时,我经常发现自己在考虑代码重用。 我应该在多大程度上使代码可重用? 我应该将其限制在应用范围内还是应该使其在项目外部可重用? 有时候,我觉得代码的可重用性可能会妨碍简单的设计。请分享您对代码可重用性的理解和方法。

1
在自由项目中使用我自己的代码
我从事自由职业超过2年。在为其他人做项目时,我编译了一些我在项目中实现的常见任务,并将其放入代码中。这是一个具有某些功能的库,我可以重复使用这些功能,而不必多次重写同一件事。我正在谈论访问Access数据库,从FTP和类似内容下载信息。 从法律角度来看这可以接受吗?重用旧代码并从头开始重写它有什么区别(再次使用您自己的大脑,因此逻辑完全相同)? 我当然不拥有任何版权,并且向我的客户提供这些类的源代码。
10 legal  code-reuse 

5
太多的抽象使得代码难以扩展
我在代码库中感觉到太多抽象(或者至少是处理它)时遇到了问题。代码库中的大多数方法已被抽象为采用代码库中最高的父级A,但是此父级的子级B具有新属性,该属性会影响其中某些方法的逻辑。问题在于这些属性无法在那些方法中检查,因为输入被抽象为A,而A当然没有此属性。如果我尝试创建一个新的方法来不同地处理B,则会被调用以进行代码复制。我的技术负责人的建议是创建一个使用布尔参数的共享方法,但是这样做的问题是,有些人将其视为“隐藏的控制流”,其中共享方法具有的逻辑对于将来的开发人员可能并不明显。 ,并且即使需要添加将来的属性,即使将其分解为较小的共享方法,该共享方法也会变得过于复杂/复杂。这也增加了耦合,降低了凝聚力,并且违反了我团队中有人指出的单一责任原则。 本质上,此代码库中的许多抽象有助于减少代码重复,但是当使它们采用最高抽象时,这会使扩展/更改方法变得更加困难。在这种情况下我该怎么办?尽管其他人不能就他们认为的好事达成共识,但我还是要怪罪于我,这最终伤害了我。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.