![]() |
1
2
按合同设计!=基于接口的设计 尽管我同意,界面的使用在软件中通常被称为契约(某种程度上),但还是有区别的。尽管如此,我想我理解你的问题所在,并对此有一些想法。我正在设计一个新的项目,大约2个星期了,最近我在接口方面也有一些相同的想法。
接受这样一个事实,即您将(或几乎)永远不会第一次完全正确地获得接口。老实说,试图设计一个接口来解释所有的情况而不去实践它可能会失败。相反,定义您的接口以具有非常具体的目的,并且最初只提供满足该目的所必需的最基本的方法。例如,您可能有一个接口定义对象,另一个接口定义对象上的一组简单的原始操作。随着项目的成熟,您可以添加其他确定的方法,以方便获取/搜索操作。请记住,随着设计的改进,您可以将其添加到接口中;对于开发目的而言,这(通常)是很好的,因为一个接口在投入生产之前通常不会进行版本控制。
通过实现一些代码和单元测试来练习,您可能会得到很好的服务。这将有助于识别整体方法中的弱点。这样做的诀窍是只做足够的事情来识别问题,而不做一个镀金的狗屎屋(对不起,如果这冒犯了任何人,但这是一个常见的短语)。我建议将其视为原型代码,如果没有大量的考虑,就不应该将其用于生产。
老实说,这取决于具体情况。在某个地方的代码片段文件可能适用于此。一般来说,我会用一个便利贴来记录我的想法或想法,而不是任何特定的代码,因为我没有写任何东西(值得注意)。偶尔,我会继续并开始实现我打算用于生产的类。 更新的响应: 我认为这个问题没有一个答案。老实说,我认为这归根结底是作为一个软件开发人员/工程师的经验,并且知道你最终想要做什么/解决什么。例如,我当然不会期望一个刚从大学毕业、没有实际经验的人在没有重大设计帮助的情况下从头开始设计应用程序。大多数情况下,我认为如果你不理解你正在试图解决的问题,那么你很可能会在设计错误的解决方案时转动你的轮子。 我的直觉是,您越不了解正在使用的技术和/或要解决的问题,就越容易接受重构将更重要。我也真诚地认为,如果你觉得你可以设计一个完整的应用程序而不需要重构任何东西,那么你就不应该是设计应用程序的人。不过,重构有多重要还是个问题。 |
![]() |
2
2
马克·布拉克特在TDD上有很好的表现。 然而,我发现在这样做的时候,我有一个更困难的时间来完成我应该实现的单元测试。这可能主要是由于你所面临的经验不足的问题。所以我是这样处理的:
|
![]() |
3
1
嗯……我的想法是
Design By Contract
不太适合你的。DBC更多的是定义交互的“其他”方面,而不是方法签名(这是大多数编程语言所强制的)。所以,你定义了诸如“不变量”(总是正确的事物,例如
也就是说,我建议您研究测试(或行为)驱动设计(TDD或BDD)。它建议编写单元测试不仅是为了测试代码,而且是为了驱动设计。因此,它解决了您的3个问题:
没必要。直到有一个需要方法的测试(客户机代码)时,才编写方法。
没必要。只需开始编码规范(作为单元测试),而不是实际的代码。然后填写实际代码以满足规范要求。
编写一个显示缺失功能的单元测试。您可以现在就让它通过,也可以将实际的代码留给以后使用——失败的单元测试将迫使您在某个时刻编写代码。 我不是TDD方面的专家,我甚至不认为自己是一个从业者。然而,其中有很多有价值的想法。你应该研究它,尝试它,看看它是否有助于你组织自己。 |