在设计软件新功能的过程中,哪个流程是最佳实践?
- 设计类将要实现的接口。
- 先编写类,然后稍后提取接口。
如果选择第二种方式,何时决定需要接口?
在设计软件新功能的过程中,哪个流程是最佳实践?
如果选择第二种方式,何时决定需要接口?
当你需要从几个类中重构共同特征时,界面会出现。
在你有多个具有共同特征的类之前,很难预见应该是什么样的接口。
一旦你有了几个类,就更容易理解接口应该是什么样的,然后回过头来重构那些类以正确实现新发现的接口。
有些人在纸上设计很多类来找出接口应该是什么。这样可以避免重构真正的代码。相反,你必须重构你的设计。
我通常选择第二种方式。先编写一个类,然后再提取接口。通常提取接口的原因是需要该接口的第二个实现(通常作为单元测试的模拟对象)。
需要先有需求还是先有功能实现呢?
在我的工作流程中,界面通常是首要考虑的。如果项目的某个部分需要新功能,则会以我想如何使用它——也就是说,以其接口为基础来构建它。然后再进行功能实现。
这样,实现过程只包含实际需要的内容,不会浪费时间在过度设计华丽无用的代码上。
这完全取决于情况...
当你在设计阶段就知道会有多个类具有相同的“共性”,但它们的实现不同,那么接口就应该首先考虑。
然而,软件是有机的;它不断发展,因此我可以想象,在某些情况下,你可能会有一个类,经过一段时间后,需要从该类中提取一个接口。
对于大多数类来说,接口是真正重要的东西,因为实现可以随时更改,但一旦在接口中提供了某些内容,就很难或不可能撤回。对于项目的其余部分,接口是最重要的,而实现则是其他人的问题。
理想情况下,在任何实现工作之前应该先指定接口的主要特性。(设计测试也是个好主意。)细节可以允许发展,但对接口的任何更改都应基于其他类和例程的需求,而不是实现的产物。实现应始终由接口确定,而不是相反。
(由于这是一个与语言无关的问题,我假设所讨论的“接口”是类的公共功能,而不是例如Java替换C++抽象类的功能。在C++中,这将是类定义中标记为“public”的部分。)
我想提出两种不同的观点来解释接口:
但在这两种情况下,您都需要先进行设计,然后再编码。
对于新系统,我希望首先确定候选接口,然后再由类来实现。对于现有系统,当您发现系统中的重要实体或变化点之前并不重要或不需要提供变化点时,就需要从现有类中开发接口。