题
任何代码可重复使用的方式或其他的,至少如果你修改的代码。随机编码,是不是很可重复使用。当我读了一些书,他们通常说,你应该明确规定的代码可重复使用,通过考虑到其他情况代码的使用情况。但是,某些代码不应该是一个无所不能的所有做类。
我想有可重复使用的代码,我没有必要变更以后。你怎么做的代码可重复使用的?的要求是什么代码可重复使用的?有什么东西,可重复使用的代码,应该肯定有什么东西都是可选的?
解决方案
请参阅编写可重复使用代码的10条提示寻求帮助。
- 保持代码DRY。干意味着“不要重复自己”。
- 让一个类/方法做一件事。
- 为您的课程编写单元测试,并使测试课程变得容易。
- 从任何框架代码中删除业务逻辑或主代码
- 尝试更抽象地思考并使用Interfaces和Abstract类。
- 扩展代码。编写可以在将来轻松扩展的代码。
- 不要编写不需要的代码。
- 尽量减少耦合。
- 更多模块化
- 像代码一样编写代码是外部API 醇>
其他提示
如果您采用测试驱动开发方法,那么您的代码只能根据即将出现的方案重新用作重构。
就我个人而言,我发现不断重构会产生更清晰的代码,而不是试图猜测我需要为特定类编写代码的场景。
最重要的是,可维护性使代码可以重复使用。
可重用性本身很少是一个有价值的目标。相反,它是编写代码结构良好,易于维护和有用的副产品。
如果您打算制作可重复使用的代码,您经常会发现自己试图考虑未来项目可能需要的行为要求。无论你在这方面做得多么好,你都会发现这些未来的要求是错误的。
另一方面,如果您从当前项目的基本要求开始,您会发现您的代码可以干净,紧凑和优雅。当您正在处理需要类似功能的另一个项目时,您将自然地调整原始代码。
我建议您查看所选编程语言/范例的最佳实践(例如,Java / C#类型的模式和SOLID),精益/敏捷编程文献,以及(当然)书籍“代码完成”等。 。了解这些方法的优缺点将不断改进您的编码实践。然后,您的所有代码都将变为可重复 - 但“偶然”,而不是设计。
另请参阅此处:编写可维护代码
对于“重用”的大多数定义,至少根据我的经验,重用代码是一个神话。你能告诉我有一些伤疤吗? :-)
通过重用,我并不是指在新的组件或服务失败之前接受现有的源文件并将其击败。我的意思是采取特定的组件或服务,并重复使用它。
我认为第一步是让自己陷入一种思维模式,即至少需要3次迭代才能创建可重用的组件。为什么3?因为第一次尝试重用组件时,总会发现无法处理的内容。那么你必须改变它。这种情况发生了几次,直到最后你有一个至少看起来可以重复使用的组件。
另一种方法是进行昂贵的前瞻性设计。但随后费用全部都在前期,并且好处(可能)会在未来一段时间内出现。如果你的老板坚持认为当前的项目时间表总是占主导地位,那么这种方法将不起作用。
你会写各种模块(部分)当编写一个较大项目。可重复使用的代码,在实践中意味着你必须创建图书馆,其他项目的需要,同的功能可以使用。
所以,你要确定的模块,该模块可以重复使用,为,
确定的核心职能的各个模块。例如,如果项目已经压缩的文件,你会有一个模块,将处理的文件压缩。做 不 使它做更多的 有一件事.只有一件事。
写一个图书馆(或类),将处理的文件压缩,而无需任何超过该文件将压缩、产出和压缩的格式。这将便该模块从其余的项目,使它能够被(重新)使用不同的设置。
你没有得到它的完美第一次,当你实际上重复使用的图书馆你可能会找出的缺陷在设计(例如,你没有做它的模块化,以便能够增加新的压缩的格式,很容易地)你就可以解决这些问题的第二次和改善的可重复使用你的模块。你越重复使用(和解决的缺陷),这将成为重新使用。
最重要的事情要考虑的是耦,如果你写的耦合紧密码可重复使用性是第一个牺牲品。
离开所有需要的国家或上下文以外的图书馆。添加的方法来指定国家图书馆。
面向对象允许您将代码重构为超类。这可能是最简单,最便宜和最有效的重用方式。普通的阶级继承不需要考虑“其他情况”;你不必建立“无所不能”的代码。
除了简单的继承之外,重用是你发现的东西而不是你发明的东西。当您想要重用一个自己的包来解决稍微不同的问题时,您会发现重用情况。如果要重用不适合新情况的包,则有两种选择。
-
复制并修复它。你现在需要几乎相似的包 - 这是一个代价高昂的错误。
-
在两种情况下使原始包可重复使用。
醇>
只需重复使用即可。而已。太多关于“潜力”的思考重用和未定义的“其他情况”可能会浪费时间。
添加上述提到的项目,我会说:
- 使这些职能通用的,你需要再用
- 使用配置文件和编码使用中定义的属性文件/db
- 清楚的因素你的代码进入这种功能/课程,那些提供独立的功能和可用不同的方案,并界定这些情况下,使用配置文件
我会添加“Class composition over class inheritance”的概念。 (这是来自其他答案)。 那样“组成”的object不关心它所依赖的对象的内部结构 - 只关注它的行为,这会导致更好的封装和更易于维护(测试,关注的细节更少)。 在C#和Java等语言中,它通常是至关重要的,因为没有多重继承,所以它有助于避免你可能拥有的继承图。
避免重新发明轮子。而已。而这本身就有很多好处。如果你确实需要改变一些东西,那么你只需创建另一段代码,另一个类,另一个常量,库等......它可以帮助你和其他开发人员在同一个应用程序中工作。
评论,详细,当您下次回到代码时,看起来可能会让您感到困惑。过于冗长的评论可能会有点烦人,但它们远比稀疏评论好得多,并且可以节省数小时试图找出你上次做的WTF。