代码设计感悟-设计方案

news/2024/4/27 11:59:38/文章来源:https://blog.csdn.net/qq_39306234/article/details/130323764

设计出一个方案,中间肯定是有很多暂时无法解决的问题的,这样不必过分纠结,通过迭代的方式,暂缓一下,出去散散步喝喝茶,可能有新的角度新的方案。
除了迭代这个方式,还有分而治之的思路,将大方案拆分成小的,然后分别处理。增量式的改进是一种管理复杂度的强大工具。
两种设计方法:

  • 自上而下
  • 自下而上
    程序员或者大多数人都擅长第一种,自上而下的设计方式,拆分任务,这种方案对细节的把控可能有疏忽,但是这种细节的信息隐藏起来,其实是比较好的。另一种自下而上的方式,如果之前你已经设计了类似的方案,就可以多考虑一下复用,但是如果是从零开始,你会发现你手中的零件不足以拼出来一个完善的系统。所以其实这两种方式不冲突,要根据实际相互结合,才能设计出一款大而精的产品。
  • 软件的首要技术使命就是管理复杂度。以简单性作为努力目标的设计方案对此最有帮助
  • 简单性可以通过两种方式实现:一是减少在同一时间所关注的本质性复杂度的量,二是生成不必要的偶然的复杂度。
  • 设计是思考的过程,固执一种方式单一方法是会损害创新损害程序的
  • 好的设计都是迭代的。尝试设计的可能性很多,最终方案会越来越好
  • 想你洗隐藏是非常有价值的概念。通过问自己“应该隐藏些什么”能够解决很多困难的设计问题

软件构件中的设计

一个项目的软件复杂度非常重要

设计时考虑:最小的复杂度、易于维护、松散耦合、可扩展性、可复用性、高扇入、低扇出、可移植性、精简性、层次性、标准技术

高扇入:大量的类使用某个特定的类。

低扇出:让一个类里少量或射中的使用其他类

抽象 信息隐藏

怎么信息隐藏 找出公共的地方被多处引用的
找出容易改变的区域:1.找到看起来容易变化的项目

2.把容易变化的项目分离出来

3.把看上去容易变化的项目隔离开来

常见的容易变化的区域

  1. 业务规则例如公式
  2. 对硬件的依赖 例如与硬件通讯的接口
  3. 输入和输出
  4. 非标准的语言特性
  5. 困难的设计区域和构建区域 例如 复杂的业务逻辑 大概率质量不高需要重构修改
  6. 状态变量 可以用枚举
  7. 数据量的限制

保持松散耦合度

耦合度表示类之间或者程序质检的关系的紧密程度。设计目标时耦合度小、直接的、清晰的类或子程序,是他们与其他类或者子程序关系尽可能灵活。

例子 一个子程序被多地调用,入参是一个对象, 大家都传这个对象是没问题的,但是如果说这个子程序只需要几个关键字段进行做入参,那么就比入参是一个对象来的更松散

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102221.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis框架超详解及运用总结

Mybatis 一、什么是Mybatils?二、第一个Mybatils程序2.1、创建springboot工程2.2、准备数据2.3、配置MyBatis2.4、编写SQL语句2.5、单元测试 三、JDBC四、数据库连接池五、lombok六、Mybatis基础操作6.1、删除6.2、新增6.2.1、主键返回 6.3、修改6.4、查询6.4.1、数…

推式配货(Push)、拉式配货(Pull)和配送需求计划(DRP)的区别

随着电子商务的迅猛发展,物流配送服务已然成为企业竞争最为核心的环节,一个全面、完善的物流配送方案,能够帮助企业满足客户交期、节约运输和库存成本,促进各环节沟通,提高生产稳定性。同时,物流配送的许多…

垃圾回收概述

什么是垃圾 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收?什么时候回收?如何回收? 垃圾收…

9.7 字符串的指针和指向字符串的指针变量

9.7 字符串的指针和指向字符串的指针变量 一.字符串表示形式二.字符串指针做函数参数1.数组名做函数参数2.数组指针做函数参数 三.字符指针变量与字符数组(1)字符数组是由若干个元素组成,每个元素中存放一个字符。(2)赋…

[HBZ分享] 小米手机如何解BL锁

第一步: 进入【设置—>我的设备–>全部参数–>连续疯狂的点MIUI版本那一行】 第二步:进入【更多设置–>开发者模式】,打开USB调试 与 USB安装 第三步:进入【更多设置–>开发者模式】,进入【设别解锁状…

人工神经网络

1. 单个神经元 🍑 神经网络 即 模型 🍤 输入 四个参数 --> 结果 🍑 模型训练(学习) 例子 🍑 模型的输入x 乘 权值ω 减去阈值θ --> 激活函数 f 🍑 输出 yi (向下传递 或 直接输出) …

JVM性能监测工具-JConsole

JVM性能监测工具-JConsole JConsole工具是JDK自带的图形化性能监控工具。并通过JConsole工具, 可以查看Java应用程序的运行概况, 监控堆信息、 元空间使用情况及类的加载情况等。 JConsole程序在%JAVA_HOM E%/bin目录下 或者你可以直接在命令行对他进…

【致敬未来的攻城狮计划】— 连续打卡第十天:FSP固件库开发及FSP配置详解。

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

手势语言识别模型训练及应用

使用训练集训练模型,使模型能够识别不同手势。 OpenCV-Python环境使用训练集训练模型,使模型能够识别不同手势。系统测试 本项目基于卷积神经网络,通过Python的翻转功能沿垂直轴翻转每个图像,实现手势语言识别的功能。系统流程如图…

数据治理与数据中台架构

随着工业 4.0 时代的到来,传统行业的数字化转型是大势所趋;将数据提高到数据要素层面,让传统的技术在新的场景下发挥出新的作用,是近期研究和探讨的焦点话题。数语科技支持和服务传统行业多年,聚焦于传统数据建模和数据…

catkin_make_workspace

ERROR1 : CMake Error at /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake:113 (message): Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found. It does neither exist as an absolute directory nor in ‘${{pr…

.net6 core web项目发布部署到Linux,以守护进程服务的形式部署启动,nginx实现转发

一、发布项目 1、以文件夹形式 2、目标运行时选对应的平台(Linux-x64) 3、文件夹选项:在发布前删除所有现有文件 二、部署项目(安装.net6环境:参考Linux安装 dotnet sdk 6.0) (1)…

网络基础,InetAddress,Socket,TCP,UDP

概念:两台设备之间通过网络实现数据运输网络通信:将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口,供程序员使用,完成网络通信网络:两台或多台设备通过一定物理设备连接起来构成了网络根…

Scala中的Map 集合详解

目录 一、不可变长Map集合 1.map的声明与遍历 2.map的常用方法:get、getOrElse、keys、values、、: 二、可变长Map集合 三、Map的其他方法 key -> value 的语法形式实际上是用库中的隐式转换实现的,实际调用了 Map.apply 方法。Map.a…

盘点并发编程的12种业务场景,面试别再说你不会并发了

前言 并发编程是一项非常重要的技术,无论在面试,还是工作中出现的频率非常高。 并发编程说白了就是多线程编程,但多线程一定比单线程效率更高? 答:不一定,要看具体业务场景。 毕竟如果使用了多线程&…

力扣sql中等篇练习(十一)

力扣sql中等篇练习(十一) 1 好友申请|| :谁有最多的好友 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 出现数字次数越多,就代表它的好友越多 # 对两列数据合并时 不取出合并数据,采用UNION ALL SELECT t1.id,count(*) num FROM (SELECT request…

FreeRTOS - 计数信号量

一.任务功能 1、修改按键功能,模拟停车位出入功能 2、当按键按下 获取车位 3、当按键抬起 释放车位 二.API接口 函数原型SemaphoreHandle_t xSemaphoreCreateCounting( ①UBaseType_t uxMaxCount,②UBaseType_t uxInitialCount );功能概述创建计数信号量&#xff0c…

玩转ChatGPT:辅助编程

一、写在前面 首先让小Chat介绍自己在编程方面的天赋: 总结起来:TA掌握了海量的编程知识,能做到自动代码生成、代码审查优化、编程教学辅导以及实时问题解答。我问TA学习了多少案例,TA说:忘了,但保证够用。…

【Transformer系列(4)】Transformer模型结构超详细解读

前言 前一篇我们一起读了Transformer的论文《Attention Is All You Need》,不知道大家是否真的理解这个传说中的神(反正俺是没有~) 这两天我又看了一些视频讲解,感谢各位大佬的解读,让我通透了不少。 这篇文章就和…

语音交友app开发中的用户积分系统

引言 在当今数字时代,语音交友app已成为一种流行的社交工具。它们给用户提供了一个平台,在这里他们可以结交新朋友,分享他们的生活和信仰,并建立深厚的人际关系。然而,市场上存在大量的语音交友app,这使得…