软件的设计原则

这篇具有很好参考价值的文章主要介绍了软件的设计原则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任何傻瓜都可以写出计算机能懂的代码,但好的程序员可以写出人类能懂的代码—–Martin Fowler

如果你是新手,你可能会问,为什么代码需要设计原则?

我想说的是肯定不是为了故作高深,存在即是合理。

如果写了一个简单的程序,你可能不需要设计原则。

如果你写了一个复杂的,但是之后再也不会改,那么你也不需要。

但是现实生活中,基本上的软件系统有一定复杂度,而且都在不断的修改。所以我们需要写出一个不仅让机器看懂,还能够让人类看懂的代码。

让人类能看懂的代码即是可维护性代码,它包含两个核心原则:高内聚、低耦合。

一个有助于实现高内聚低耦合的原则是关注点分离Separation of Concerns(SOC),关注点是软件功能的不同部分,像业务逻辑或者表现方式,SOC是关于把系统分解成不同的可能没有重叠的特性,比如尽量将业务逻辑放在领域层,而不是一部分放在存储过程,一部分放在UI。

后来这些原则得到进一步的完善和强化,大师Robert C. Martin给出了5个更有效,更具体和可实施的原则,即比较流行的SOLID原则。

单一职责(SRP):类应该尽可能简单,专注于一个核心任务,

开闭原则(OCP):即对扩展开放,对修改关闭

里氏替换原则(LSP):子类可以替换他们的基类

接口分离原则(ISP):接口隔离原则解决的是接口臃肿的问题,建议保持接口最低限度的函数

依赖反转原则(DIP):即高级模块不应该依赖于低层模块,二者都应该依赖于抽象,什么意思呢?比如说你在开发asp.net MVC, Controller里需要访问某个服务或者数据库层,最好不要直接在controller里直接引用相关的实现类,而应该引用相关的服务和持久层的抽象,一般是相应的接口,通用的做法是使用IOC组件来做这个事情,如Unity,Autofac等。

除此以外,还有一些比较实用的原则:

1. DRY(Don’t Repeat Yourself)

2. 说,别问(Tell,Don’t Ask)

总的来说,这是对象建模的启蒙原则,就OOP而言,创建软件实体可以包含数据并暴露某些行为,

意思是你在实现某个功能的时候,避免请求数据并在某个外围逻辑容器里处理,

举个例子,比如一个订单聚合根,计算订单的价格只需要通过聚合根内的一个方法获取就好了,不需要你在订单聚合根意外的别的其他地方获取订单项再重新计算一遍了。

3. KISS(keep It Simple,Stupid)

法国诗人曾说,完美不是没有东西可以增加,而是没有东西可以减少,在软件开发里,是为了防止过渡设计的情况发生。

4. YAGNI(You Ain’t Gonna Need It)

这个原则认为实现需求上没有提到的任何功能都是有问题的,即在你认为自己可能需要而不是实际需要时实现一个函数可能会给你带来一些潜在的问题。

说了这么多如何写出好的代码?写出好的代码,不是每个人天生就会的,他需要一个过程,一个重构的过程。

实际工作上,重构是每天都会发生的,你重构代码不是因为他不工作了,而是为了更好的实现某些非功能性需求;如可读性,可维护性,可测试性或可扩展性,或者为了提高性能。

常见的重构操作:

  • 提取方法

  • 提取接口

  • 封装字段

  • 重命名

  • 使用新的组件代替旧的组件


点关注,不迷路。

如果您喜欢这篇文章,请不要忘记点赞、关注、转发,谢谢!如果您有任何高见,欢迎在评论区留言讨论……文章来源地址https://www.toymoban.com/news/detail-659469.html

到了这里,关于软件的设计原则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件的设计原则

    任何傻瓜都可以写出计算机能懂的代码,但好的程序员可以写出人类能懂的代码—–Martin Fowler 如果你是新手,你可能会问,为什么代码需要设计原则? 我想说的是肯定不是为了故作高深,存在即是合理。 如果写了一个简单的程序,你可能不需要设计原则。 如果你写了一个

    2024年02月12日
    浏览(42)
  • 软件设计原则

    软件设计原则 1小时系列 (C++版)-CSDN博客 设计模式——六大设计原则_接口设计6大原则-CSDN博客 摘抄:  公共接口下,添加不同的实现。  橙色为接口,将繁杂的接口拆成多个接口   未完待续......

    2024年01月17日
    浏览(35)
  • 七大软件架构设计原则详解

    目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则

    2024年02月05日
    浏览(36)
  • 软件设计原则:依赖倒置

    定义 依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计原则之一,其核心是高层模块(如业务逻辑)不应当依赖于低层模块(如具体的数据访问或设备控制实现),而是双方都应依赖于抽象接口。抽象不应依赖细节,细节应依赖抽象。 应用场景 软件系统的架构设

    2024年04月09日
    浏览(65)
  • 软件开发、设计、架构的其他原则

    LOD:迪米特法则(Law of Demeter) CRP:合成复用原则(Composite Reuse Principle) DRY:不要重复你自己原则 (Don’t Repeat Yourself Principle) KISS:KISS原则 (Keep It Simple and Stupid Principle) YAGNI:你不需要它原则 (You aren\\\'t gonna need it Principle) 又叫最少知识原则(Least Knowledge Principle)。只和你的直接朋友交

    2024年02月02日
    浏览(79)
  • 【软件设计原则】系统设计面试基础:CAP 与 PACELC

    什么是 CAP 定理以及 PACELC 如何扩展它? 在分布式系统中,可能会发生不同类型的故障,例如,服务器可能会崩溃或永久故障,磁盘可能会损坏导致数据丢失,或者网络连接可能会丢失,导致系统的一部分无法访问。分布式系统如何对自身进行建模以从不同的可用资源中获得

    2024年02月13日
    浏览(41)
  • 软件开发:面向对象设计的七大原则!

    开闭原则、里氏代换原则、迪米特原则(最少知道原则)、单一职责原则、接口分隔原则、依赖倒置原则、组合/聚合复用原则。 开闭原则(The Open-Closed Principle ,OCP) 开闭原则:软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。 概念理解 开闭原则是指在进行面

    2024年02月07日
    浏览(48)
  • 【软件架构设计】支持大规模系统的设计模式和原则

    今天,即使是小型初创公司也可能不得不处理数 TB 的数据或构建支持每分钟(甚至一秒钟!)数十万个事件的服务。所谓“规模”,通常是指系统应在短时间内处理的大量请求/数据/事件。 尝试以幼稚的方式实现需要处理大规模的服务,在最坏的情况下注定要失败,或者在最

    2024年02月13日
    浏览(39)
  • 软件工程:阿姆达尔定律,性能设计和优化的指导原则

    hi,我是熵减,见字如面。 在软件开发中,你是否做过性能的优化,譬如: 有一个图片处理的程序,其中包含一个函数用于对图片进行滤镜处理。该函数中包含两个部分:一个可并行化的部分和一个串行部分。可并行化的部分用于对图片的每个像素进行计算,而串行部分用于

    2023年04月24日
    浏览(47)
  • 设计模式之开闭原则:如何优雅地扩展软件系统

    在现代软件开发中,设计模式是解决常见问题的最佳实践。其中,开闭原则作为面向对象设计的六大基本原则之一,为软件系统的可维护性和扩展性提供了强大的支持。本文将深入探讨开闭原则的核心理念,以及如何在实际项目中运用这一原则,以便更好地设计软件系统。

    2024年01月18日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包