gpt4 book ai didi

interface - 设计接口(interface) : predict methods needed, 约束自己并处理想到的代码

转载 作者:行者123 更新时间:2023-12-01 00:03:26 27 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

6年前关闭。




Improve this question




Was: Design by contract: predict methods needed, discipline yourself and deal with code that comes to mind



我非常喜欢按契约(Contract)进行设计的想法(至少,据我了解的校长)。我相信这意味着您在开始实现实际代码之前先定义接口(interface),对吗?

然而,根据我有限的经验(现在是 3 OOP 年),我通常无法抗拒尽早开始编码的冲动,原因如下:
  • 因为我有限的经验表明我无法预测我将在界面中需要哪些方法,所以我不妨立即开始编码。
  • 或者是因为我太急于先写出整个接口(interface)。
  • 或者当我尝试它时,我仍然最终已经实现了一些代码,因为我担心我可能会忘记这个或那个重要的代码,当我设计接口(interface)时会浮现在脑海中。

  • 如您所见,尤其是最后两点,这导致了一种非常无序的做事方式。任务混在一起。我应该在设计界面和实际编码之间划清界限。

    如果您与我不同,是一位优秀/纪律严明的规划师,如上所述,您将如何:
  • ...了解您将需要的大多数方法吗?特别是如果它是实现您还不熟悉的东西的组件。
  • ...抵制立即开始编码的冲动?
  • ...处理您在设计界面时想到的代码?

  • 更新:
    谢谢你到目前为止的答案。宝贵的见解!而且......我的立场是正确的;看来我误解了按契约(Contract)设计的想法。为了清楚起见,我的实际意思是:“在实现实际组件之前提出接口(interface)方法”。

    我想到的另一件事与第 1 点有关:
  • b) 您如何知道您将需要的大部分组件。在开始实际编码之前,如何充实这些内容?

  • 为了争论,假设我是 MVC 模式的新手,我想实现这样的组件/架构。一种天真的方法是考虑:
  • 前 Controller
  • 一些抽象的 Action Controller
  • 一些抽象 View

  • ……可以这么说。

    但是,由于更熟悉 MVC 模式,我现在知道同时拥有:
  • 请求对象
  • 路由器
  • 调度员
  • 响应对象
  • 查看助手
  • 等等。
  • 等等。

  • 如果你把这个想法映射到你想要开发的一些全新的组件上,而你还没有经验;你如何在没有实际编码的情况下想出这些额外的组件,并以这种方式发现这些想法?您如何预先知道某些组件的粒度应该是多少?这是训练自己彻底思考的问题吗?还是善于抽象思维的问题?

    最佳答案

    按契约(Contract)设计!= 基于接口(interface)的设计

    尽管我承认接口(interface)的使用通常被称为软件中的契约(Contract)(某种意义上),但还是有区别的。话虽如此,我想我理解你的问题所在,并对此有一些想法。我正在设计一个新项目大约 2 周,最近我对界面有一些相同的想法。

    unable to predict what methods I will be needing 

    接受这样一个事实,即您将(或几乎)永远不会在第一次完全正确的界面。老实说,试图设计一个界面来解释所有情况而不执行它可能会失败。而是将您的接口(interface)定义为具有非常特定的目的,并且最初仅提供满足该目的所需的最基本的方法。例如,您可能有一个定义对象的接口(interface)和另一个定义对对象的一组简单粗略操作的接口(interface)。随着项目的成熟,您可以添加其他方法,因为它们已被识别以促进获取/搜索操作。请记住,随着设计的完善,您可以添加到界面中;这(通常)对于开发目的来说很好,因为接口(interface)通常在生产之前不会进行版本控制。
    urge to start coding right away

    通过实现一些代码和单元测试来练习它,您可能会得到很好的服务。这将有助于识别您的整体方法中的弱点。做到这一点的诀窍是只做足够的事情来确定问题而不制造镀金的狗屎房子(对不起,如果这冒犯了任何人,但这是一个常见的短语)。我建议将此视为原型(prototype)代码,不经过深思熟虑就不应用于生产。
    deal with code that comes to mind when you are designing the interfaces

    老实说,这取决于情况。某处的片段文件可能适用于此。一般来说,我只会使用便利贴来记录想法或想法,而不是任何特定的代码,因为到目前为止我还没有写任何东西(值得注意)。有时我会继续着手实现我打算用于生产的类。

    更新回复:
    我认为这个问题没有一个答案。老实说,我认为这归结为作为软件开发人员/工程师的经验,并知道你最终想要做什么/解决什么。例如,如果没有一些重要的设计帮助,我当然不会指望一个没有实践经验的大学刚毕业的人从头开始设计一个应用程序。大多数情况下,我认为,如果您不了解您要解决的问题,那么您很可能会转动轮子试图设计错误的解决方案。

    我的直觉是,你对所使用的技术和/或要解决的问题了解得越少,你就越容易接受你的重构将更重要。老实说,我还认为,如果您认为您可以设计整个应用程序而无需重构任何东西,那么您可能不应该是设计应用程序的人。不过,重构的重要性如何是个问题。

    关于interface - 设计接口(interface) : predict methods needed, 约束自己并处理想到的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436984/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com