设计原则

SOLID
1. SRP
A Single Responsibility Principle
A class should have one, and only one, reason to change.

2. OCP
A module should be open for extension but closed for modification.
polymorphism is a way to implement it.

Q: what's the difference between static polymorphism and dynamic polymorphism?

3. The Liskov Substitution Principle(LSP)
Subclasses should be substitutable for their base classes.

we should note the canonical Ellipse/Circle dilemma

4. The Dependency Inversion Principle(DIP)
Depend upon Abstractions instead of concretions.

we should note the difference between procedural architecture and OO architecture.

5. The Interface Segregation Principle(ISP)
Many Client specific interfaces are better than one general purpose interface.
so we can isolate the individule interface change. we can define interface according to the client category. Any change needed to be made on the existing interfaces, we can add a new interface instead of changing the existing interfaces. So we can avoid the issue of recompilation and redeployment.

6. Principles of Package Architecture
how to group together package

6.1 The Release Reuse Equivalency Principle(REP)
The granule of resue is the granule of release

6.2 The Common Closure Principle(CCP)
Classes that change together, belong together. So the package impact from release will be minimized.

6.3 The Common Reuse Principle(CRP)
Classes that aren't resued together should not be grouped together


6.4 The Acyclic Dependencies Principle(ADP)
The dependencies between packages must not form cycles.

Cycles can be broken in two ways:
1. create a new package
2. make use of the DIP and ISP
add a interface on the user side(who use the function) and the other side implement the interface.

6.5 The Stable Dependencies Principle(SDP)
Depend in the direction of stability.

I(Instability) = Ce/(Ca+Ce)
Ce: Efferent Coupling, outgoing dependencies
Ca: Afferent Coupling, incoming dependencies

So SDP can be rephrased as: Depend upon package whose I metric is lower than yours.

6.6 The Stable Abstractions Principle(SAP)
stable package should be abstract packages.

The stable package maybe hard to change, so it is not flexible; But we can make the stable package abstract, so it is easy to extend.

This is just a restatement of the DIP. That is , the package that the most depended upon should also be the most abstract.

A(Abstractness) = Na/Nc
Na: Number of abstract classes in the package
Nc: Number of classes in the package


7. KISS
Keep it simple and stupid.
Less is more.

8. CoC
Convention over Configuration, e.g. ROR

9. YAGNI
You Ain't Gonna need it. 极限编程中的一个概念,只实现目前需要的功能。
基于多智能体深度强化学习的空地协同通信系统轨迹设计与访问控制 所属子方向: UAV assisted communication 名词注释 coordinated:协调、协同 base stations 基站,公用移动通信基站,是移动设备接入互联网的接口设备,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。 UAV-BS:无人机基站 cooperative-competitive game:合作竞争博弈 throughput :吞吐量,每秒比特数 bps,bits per second Determinis 阅读详情

相关推荐

从MIPS汇编到C语言:手把手教你用Mars模拟器理解指令集(附实战代码)

本文详细介绍了如何使用Mars模拟器从MIPS汇编过渡到C语言编程,通过实战代码解析ADD、LW、BEQ等指令集与C语言结构的对应关系。内容涵盖环境搭建、算术运算、内存访问、条件分支及函数调用等核心概念,帮助读者深入理解MIPS指令分类和计算机底层运行机制。

weixin_26821003的博客 357

C++中的八大设计原则

C++ 中的八大设计原则可以帮助我们创建高内聚、低耦合的代码。

GOLOJO的博客 1909

CV领域交叉注意力机制:QKV在图像特征增强中的核心作用解析

本文深入解析了CV领域中交叉注意力机制的核心组件QKV在图像特征增强中的关键作用。通过通俗类比和实战案例,阐述了Q(查询)、K(键)、V(值)如何协同实现动态权重分配,从而在目标检测、图像分割与生成等任务中显著提升模型性能与语义对齐能力。

weixin_29194817的博客 437

设计模式之六大设计原则

古人云: 有道无术,术可求.有术无道,止于术.而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下:​1、单一职责原则(Single Responsibitity Principle)​2、开放封闭原则(Open Close Principle)​。

在青海看海的企鹅的博客 2923

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

架构决策之消息中间件MQ系列六-Pulsar

一、架构

恰恰虎的博客 7253

RESTful API的设计原则和实现方式

/ 省略构造函数和 getter/setter 方法通过遵循这些设计原则和实现方式,可以设计出简洁、灵活、可扩展、易于理解和使用的 RESTful API,提供良好的用户体验和性能。

喔的嘛呀的博客 3437

数字图像处理第九章笔记

目录一、腐蚀与膨胀1、腐蚀2、膨胀3、对偶性4、开操作与闭操作二、一些基本的形态学算法1、边界提取2、孔洞填充3、连通分量提取4、凸壳5、细化6、粗化7、骨架8、形态学重建三、灰度级形态学1、腐蚀和膨胀2、开运算和闭运算3、灰度级形态学算法 一、腐蚀与膨胀 1、腐蚀 腐蚀可以去除图像的某些部分。 2、膨胀 膨胀可以连接裂缝。 3、对偶性 膨胀和腐蚀彼此关于集合求补运算和反射运算是对偶的 4、开操作与闭操作 开操作:B对A先腐蚀,再进行膨胀 可以平滑物体轮廓,断开较窄的狭颈并消除较细的突出物。 闭操作

方悔读书迟 1375

设计原则有哪些?

设计原则是软件开发和系统设计中的核心指导思想,用于提高代码的可维护性、可扩展性、复用性和灵活性。:根据具体问题权衡原则(如性能 vs 可维护性),避免教条化。

qq_36929638的博客 1162

【论文泛读|附源码】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 **数据驱动**的**坐标发现与方程发现算法**。想回答的问题很简单,就是根据数据写方程。 想想牛顿的处境,如何根据各种不同物体下落的数据,写出万有引力的数学公式的。这篇文章就是来做这件事的。当然,这篇论文并没有从牛顿视角,完全去思考牛顿所想。而是利用现有的**深度学习技术** 和 **动力学重构的方法** 。提出了一种框架,基于现有的计算机技术,去发现物质运动背后的物理规律。 这里直接给出这篇方法的核心思路图,我们后面会逐个讲解。

qq5q13638的博客 2456

用Typora画流程图和序列图:Mermaid语法实战教程(含常见报错解决)

本文是一份详细的Typora与Mermaid语法实战教程,教你如何在Markdown文档中高效绘制流程图和序列图。文章涵盖从环境配置、核心语法到复杂图表构建的全过程,并重点解析了常见报错原因与解决方案,助你将可视化图表无缝融入文档工作流。

weixin_29279101的博客 299

代码设计原则

代码设计原则是用于提高代码质量、易读性和可维护性的规则和准则。

猪猪 887

华为 MetaERP 通过元数据驱动的多组织架构 + 内部交易协同 + 自动对账引擎 + 合并规则引擎,实现多组织内部往来与合并报表的全流程自动抵消,核心是源头标准化、过程自动化、结果可追溯

摘要: 华为MetaERP通过元数据驱动的多组织架构与主数据标准化,实现内部往来与合并报表全流程自动化。其核心包括:统一组织模型与主数据(确保数据口径一致)、内部交易协同(自动生成对称凭证)、智能对账引擎(多维度自动匹配差异)、合并规则引擎(配置化抵消模板)。依托GaussDB高性能数据库与流批一体架构,华为全球88家子公司合并报表效率提升400%,关账时间缩短至2小时,支持多准则、多币种自动抵消,审计全程可追溯。相比传统ERP,MetaERP在协同性、自动化与扩展性上优势显著,为跨国集团提供高效、准确的合

金牌架构师 264

设计原则——SOLID

设计原则SOLID

qq_40843987的博客 5357

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计原则总结

面向对象设计原则概述 对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设...

Jason_8848的博客 636

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

7种设计原则的详细讲解

一个类应该只有一个原因去改变,即一个类应该仅有一个职责。

软件开发工程师 1630

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【RESTful】RESTful API的设计原则

设计一套高质量的RESTful API需要遵循一系列原则,以确保其可用性和可维护性。良好的API设计不仅能提升开发效率,还能改善用户体验。随着技术的不断进步,开发者应持续探索和优化这些设计原则,以适应不断变化的需求。本文旨在帮助读者深入理解RESTful API的设计原则,并提供实用的指导,以便在项目中有效应用这些原则。希望这些见解能为您的API设计提供帮助,助力您的开发工作更加顺利。

人生苦短,睡觉要紧,睡醒再说 3062

HBase的 rowkey 设计原则

hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储。 rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。 rowkey是以字典顺序排序的,存储的是字节码。 Rowkey设计原则 1.Rowkey的唯一原则 必须在设计上保证其唯一性。由于在HBas

zjjcchina的博客 3375

SOLID设计原则

设计原则--《架构整洁之道》读书笔记前言一、SRP:单一职责原则二、OCP:开闭原则三、LSP:里氏替换原则四、ISP:接口隔离原则五、DIP:依赖反转原则六、总结 前言          通常来说,要想构建一个好的软件系统,应该从写整洁的代码开始做起。毕竟,如果建筑所使用的砖头质量不佳,那么架构所能起到的作用也会很有限。反之亦然,如果建筑的架构设计不佳,那么其所用的砖头质量再好也没有用。这就是SOLID设计原则所要解决的问

woody218的博客 2190

六大设计原则 (SOLID)

设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下

qq_45110186的博客 3078

OO设计原则

模式还是原则? 私以为,设计原则就像授之以渔,设计模式就像授之以鱼。 更侧重学习设计原则的原因 OO设计模式有很多,基础的设计模式为大名鼎鼎的GOF23设计模式,另外还有很多种特定领域的设计模式。套路太多。 设计模式是对设计原则实践的经验总结,可以让代码模块解耦,易于扩展和维护。随着微服务的推广,每一个功能模块都可以分离出一个独立的服务,并通过restFul接口调用进行功能模块间的解耦。微...

HELLOW,文浩 403

如何学好设计,做好架构? 设计原则才是关键

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2401_84537603的博客 1121

七大设计原则介绍

古人云: 有道无术,术可求.有术无道,止于术.而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。1、单一职责原则(Single Responsibitity Principle)2、开放封闭原则(Open Close Principle)3、里氏替换原则(Liskov Substitution Principle)

埃泽漫笔 1614

HBase RowKey的设计原则

HBase是三维有序存储的,三维指的是:RowKey(行健)、column key(columnFamily和qualifier)、TimeStamp(时间戳),通过这三个维度我们可以对HBase中的数据进行快速定位。下面我们主要来讨论RowKey的设计原则: HBase中RowKey可以唯一标识一条记录,在HBase查询的时候,我们有两种方式,第一种是通过get()方法指定RowKey条件后获

lavimer 2万+

代码该怎么写——设计原则

代码该怎么写——设计原则 初学者学会编程语言后开始写代码,当我们实现一个功能后会有成就感,但是看了别人写的代码又大感困惑,他为什么把代码写得那么复杂?明明一个简单的功能,为什么要这样做? 还有人即使学会了编程语言,仍然不知道怎么下手写代码,哪里该创建一个类,哪里又该创建一个方法? 现代社会,文盲率很低,人人识字,但为什么不是人人都能当作家呢? 因为,我们只学识字是不够的,我们还得学习写作的技巧和套路,并且还要有一定的人生经历,这样才能成长为一个作家。简而言之,会写代码,和写好代码,是两个层面! 面向对象编程

编程之路的专栏 4978

【C++设计模式】八大设计原则

在软件开发中,设计原则是指导我们编写高质量代码的重要准则。为了写出符合高内聚、低耦合原则的代码,我们需要遵循一些公认的设计原则。以下是C++中常见的八大设计原则的简单介绍,以及符合和违背这些原则的代码示例。

一鲸落万物生的博客 1193
上一篇: 多线程等待机制
下一篇: PMBOK 学习笔记
firestone-sh
博客等级 码龄24年 19粉丝 431原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值