首页 > 其他分享 >软件的设计原则

软件的设计原则

时间:2023-08-20 12:33:24浏览次数:52  
标签:重构 需要 原则 代码 接口 写出 设计 软件

任何傻瓜都可以写出计算机能懂的代码,但好的程序员可以写出人类能懂的代码—–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)

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

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

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

常见的重构操作:

  • 提取方法

  • 提取接口

  • 封装字段

  • 重命名

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


点关注,不迷路。

如果您喜欢这篇文章,请不要忘记点赞、关注、转发,谢谢!如果您有任何高见,欢迎在评论区留言讨论……

公众号

标签:重构,需要,原则,代码,接口,写出,设计,软件
From: https://www.cnblogs.com/zhaorong/p/17643847.html

相关文章

  • 基于springboot校园管理系统的设计与实现
    研究的内容目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的校园管理系统的信息管理软件仍没有得到大多数人的了解或认可。本选题宗旨在通过标签分......
  • 基于SpringBoot的在线视频教育平台的设计与实现
    拟解决的问题:(1)根据指导老师提供的原始材料和课题要求按照管理信息系统的生命周期开发方法和步骤,经过细致的系统分析、合理的系统设计,高效率的系统试试,引发web开发的思想,选择可行的开发工具,实现在线教育平台。本课题充分利用面向对象开发环境的可视化特点,合理的设计用户界面,按照数......
  • 基于springboot高校心理教育辅导设计与实现
    研究思路 本论文研究的高校心理教育辅导系统是一个采用B/S结构的Web应用程序,系统的开发主要使用面向对象语言Java、SpringBoot框架、Thymeleaf模板引擎(主要用来编写动态页面)、MySQL数据库。通过Thymeleaf模板引擎实现Java代码和前端代码分离,前端服务器访问后端服务器提供的接......
  • 基于Java的免税商品优选购物商城设计与实现
    课题意义该系统建立在海南发展自贸港的前提下,探索“互联网+旅游+免税购物”这一新型业务模式,在电商平台建设方面,旅客可随时随地购买;在增值服务方面,形成7*12小时的全面高质量客户服务体系,为所有客户提供专业的售后服务。以提高售后服务质量和客户信息反馈的速度,改变传统的技术服务和......
  • 设计一个网络通信协议
    Authorbasilguo@163.comDateAug.19,2023Description设计一个网络通信协议大多数时候,并不需要进行协议设计,只需要使用成熟的协议就行了。但架不住少数时候的存在,所以就需要了解如何去设计一个协议。实际上协议工程学是一门专门的学科,而且互联网络常见......
  • 表设计规范
    规范①:设计规范化表,消除数据冗余数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库设计方式。满足范式要求的表,称为规范化表,范式产生于20世纪70年代初,一般表设计满足前三范式就可以,在这里简单介绍一下前三范式先给大家看一下百度百科给出......
  • 设计模式分类
    博客地址:https://www.cnblogs.com/zylyehuo/......
  • EndNote下载_EndNote官方版下载 系列软件
    EndNote免费版是一款功能非常强大的文献管理软件,EndNote免费版为用户提供了极为强大的文献管理功能,能够帮助用户将自己的文献保存到云库中,方便各种各样的文献更好的进行流通分享,简单的下载即可进行使用,感兴趣的用户快来下载体验吧。软件地址:看置顶贴endnoteX7安装教程1、首先需要......
  • PhotoShop 2023下载-功能强大的图片编辑软件 系列软件
    AdobePhotoshop,简称“PS”,是一个由Adobe公司开发和发行的图像处理软件。它可以编辑和合成多个图层中的位图,支持图层遮罩、图像合成。除了位图之外,它还具有编辑或渲染文本、矢量图形、3D图形和视频,并且PS还支持外部插件来拓展其功能。其中,PhotoshopCC2019于2018年10月15日发布。......
  • Adobe Photoshop官方软件Photoshop 2022正式版下载 系列软件
    Photoshop2022v23.0.2.101是由Adobe公司最新推出的高效、专业、实用的图像处理软件,同时该软件主要是以其强悍的编辑和调整、绘图等功能得到广泛的应用,其中还有各种图片的调整和图画绘制以及图像的修复、调色等一系列的工具都是数不胜数,使用范围也是非常的广,我们从照片修饰到海报......