学习
实践
活动
专区
工具
TVP
写文章

华山论剑之契约式编程与防御式编程

契约式编程 就在我们讨论的时候,天空突然飘来五个字——那都不是事,哦不对,是『契约式编程』。 这个好像有点像! 契约式编程要求我们在『前提条件』、『后继条件』和『不变量条件』进行契约的检查。类似的,例如检查参数,一旦参数不对,当即撕毁契约。 这一点,现在很多新的语言都支持了,例如Swift,就支持对参数进行约束检查,这就是一种类契约式编程。 以上两种编程方式,都是非常理想化的编程,但在一般的公司里面不论是防御还是契约,实现起来都是比较困难的,例如前端与后端的接口、不同部门同事的交流,按照契约式编程,没人Care你的契约,按照防御式编程,代码惨不忍睹 那么到底该怎么办呢,我认为,如果能在公司层面推广契约式编程,首先是对开发效率的提升,让每个人都对自己写的代码负责,在开发者之间建立良好的信任关系,同时也能减少不必要的沟通成本和精力。

84830
  • 广告
    关闭

    新年·上云精选

    热卖云产品年终特惠,2核2G轻量应用服务器7.33元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    简单聊聊契约式设计(下)

    契约式设计,字面上看起来,袁帅觉得没什么特别的。而且契约这个词,他也没少听说,人与人之间的契约,软件开发中的契约测试,守信用也是一种契约守护。但他不确定这个DbC是否表达这个意思。 DbC体现了一种契约精神 为了寻找答案,袁帅继续查阅了一些学习资料,得到了很多有益的信息: 早在1986年,伯特兰·迈耶就提了出Design by Contract[1],这哥们还设计了Eiffel编程语言来实现这种设计思想 等我发明出新概念,我也得去搞一个…” Design by Contract,按契约设计,也叫契约编程,它规定软件设计人员应为软件组件定义正式、精确和可验证的接口规范,该规范应使用前提条件、后置条件和不变式来扩展抽象数据类型的普通定义

    94430

    【浅谈Chromium中的设计模式(二)】——prepost和Delegate模式

    Pre/post 请注意pre/post不能算是典型意义上的设计模式,Pre/post是契约式编程思想的概念。但是在从chromium代码中确实能看到不少他们的身影。 契约式编程中的PRE/POST 契约式编程(英语:Design by Contract,缩写为DBC)在Wiki上的解释:契约式编程是一种设计计算机软件的方法。 在《程序员修炼之道:从小工到专家》中专门有一条讲的就是契约式编程(按合约设计)。 DesignbyContract的核心是断言(assertion)。 PRE/POST设计的好处 在编程语言不支持了DBC的情况下,在代码层面采用PRE/POST的设计可以极大地提高代码的易读性和可维护性。且建立这种契约明确了我们什么时候什么阶段该干什么事。

    1.4K60

    .NETASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)

    Model与View之间的组合关系) 1】开篇介绍 这篇文章让我们一起来学习一下有关Asp.netMvc中的Mode元数据的相关设计和围绕元数据的一些其他对象模型,他们是如何通过彼此协调来支撑起一个灵活的界面编程接口 、契约式设计,这些模式目的都是为了能很好的控制耦合,产生极大的扩展灵活性;元编程让我们能基于最终的用户选择动态的产生运行软件的代码,而契约式设计能让我们将控制权设立在很远的地方,从而很大粒度的控制扩展性 ViewModel中,这样会让每一次的查询都会涉及到一些你本次不相关的属性; 3.Metadata元数据驱动设计(如何使用中间层元数据来驱动最终的行为) 元数据驱动设计模式是众多经典框架设计模式之一,它与契约式设计有点一脉相承的感觉 ;其实框架设计的本质是如何灵活的运用一些框架设计模式,不同的语言、平台对模式的运用各不相同,但是模式的中心思想一直不会变,不管你如何设计都必须呈现出框架模式的本质才行; 在众多的框架设计模式中 如:契约式设计 、元编程、元数据驱动设计、管道模型、远程代理模式、提供程序模型;元数据驱动设计模式是使用频率比较高的,因为其复杂度也相对较低所以比较容易上手;其实在很多现有的.NET框架中,如:WCF、ASP.NET、

    30860

    小谈 Kotlin 的空处理

    Java 中对于空指针的处理总体来说可以分为“防御式编程”和“契约式编程”两种方案。 “防御式编程”大家应该不陌生,核心思想是不信任任何“外部”输入 —— 不管是真实的用户输入还是其他模块传入的实参,具体点就是各种判空。 { if (activity == null) { return; } ...... } 另一种是“契约式编程 回过头来,对于 Kotlin,我觉得就是一种把契约式编程和防御式编程相结合且提升到语言层面的处理方式。(听起来似乎比 Java 中各种判空或注解更麻烦? 但这种既“契约式”(判空)又“防御式”(声明空与非空)的方案会让开发者做更多的工作,会更“麻烦”一点。 当然,Kotlin 为了减少麻烦,用 "?" 简化了判空逻辑 —— "?"

    35310

    Python 的 .py 与 Cython 的 .pxd .pyx .pyd 文件格式之间的主要区别

    pxd 文件.pxd 文件是由 Cython 编程语言 "编写" 而成的 Python 扩展模块头文件。. pyx 文件.pyx 文件是由 Cython 编程语言 "编写" 而成的 Python 扩展模块源代码文件。. pyd 文件.pyd 文件是非 Python,由其它编程语言 "编写-编译" 生成的 Python 扩展模块。 D 语言源自 C/C++,借鉴了众多编程语言的特色和现代编译器技术,融会贯通了设计者丰富的实践经验,使之具备了非凡的威力 ── 既有 C/C++ 语言的强大威力,又有 Python 和 Ruby 的开发效率 它集众多系统级编程所需的功能于一身,例如垃圾回收、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置单元测试、Mixin 风格多继承、类 Java 包管理机制、内置同步机制、内建基本运行时信息。

    3K30

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • FPGA 云服务器

      FPGA 云服务器

      腾讯FPGA云服务器是基于FPGA硬件可编程加速的弹性计算服务,您只需几分钟就可以获取并部署您的FPGA实例。结合IP市场提供的图片,视频,基因等相关领域的计算解决方案,提供无与伦比的计算加速能力……

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券