GRASP原则五:高内聚 High Cohesion  How to keep objects focused, understandable and manageable, and as a side effect support Low Coupling? 如何使对象功能专注.可理解.可管理,同时又支持 低耦合?5.1 GRASP rule 5:High Cohesion  Name:High Cohesion 高内聚  Problem:  How to keep objects f…
GRASP原则七: 纯虚构 Pure Fabrication  如果依据信息专家原则获得的解决方案不合适,既不想违反低耦合.高内聚,也不想违 反其他的原则, 该如何把职责分配给对象?  左右为难….2.1 GRASP rule7: Pure Fabrication 纯虚构  Name: Pure Fabrication  Problem: 依据一些原则(比如,信息专家)获得的解决方案不合 适的情况下,既不想违反低耦合.高 内聚,也不想违反其他的原则, 如 何 把 职 责 分 配 给 对…
面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低. 每一个类完成特定的独立的功能,这个就是高内聚.耦合就是类之间的互相调用关系,如果耦合很强,互相牵扯调用很多,那么会牵一发而动全身,不利于维护和扩展. 类之间的设置应该要低耦合,但是每个类应该要高内聚.耦合是类之间相互依赖的尺度.如果每个对象都有引用其它所有的…
重要的几个GRASP原则:1.控制器模式   2.创建者模式 (原则)3.信息专家模式(原则) 4. 高内聚 低耦合   这里所说的模式并不是java中针对具体的事件的设计模式 主成功场景的几个操作:1.makemewsale  2.enteritem   3.endsale   4.makepayments 对1)进行交互图的考虑:参照操作的契约来 ----我们首先要考虑的是为系统 操作选择控制器,根据控制器模式,所以说以向  register发送消息为系统makenewsal的开始. ---…
4.GRASP原则四:控制器 Controller  What first object beyond the UI layer receives and co-ordinates (controls) a system operation? 在领域层,由谁负责首先接收并协调来自UI层的系统操作?4.1 Mini Exercise 4  For Monopoly game, Which object starts the game?  Understanding the Problem …
3.GRASP原则三: 低耦合 Low Coupling  How to support low dependency, low change impact and increased reuse?  如何保证设计方案支持低的依赖性.低的变化影响度.增加可重用性?3.2 耦合的定义Coupling  耦合: 一个元素与其它元素的联接.感知以及依赖程度的度量 Measure of how strongly one element is: connected to. has knowledge…
2.GRASP原则二:信息专家 Information Expert  What is a general principle of assigning responsibility to objects? 为一个对象 分配职责的一般原则是什么?  “鸡鸣狗盗” 战国时候,齐国的孟尝君喜欢招纳各种人做门客,号称宾客三千….2.2 GRASP rule2: Information Expert  Name: Information Expert (信息专家)  Problem:  Wha…
GRASP原则八: 间接 Indirection  若两个对象直接连接,导致耦合太紧,如何解决?3.1 GRASP rule8: Indirection 间接  Name: Indirection  Problem: 把职责分配到哪里可以避免两个或者多个对象之间的 直接耦合?如何解耦对象以保持较高的可重 用性? Where to assign a responsibility to avoid direct coupling between two or more objects? How…
1.高内聚 首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高.在软件中内聚程度的高低,标识着软件设计的好坏. 我们在进行架构设计时的内聚高低是指,设计某个模块或者关注点时,模块或关注点内部的一系列相关功能的相关程度的高低. 例如:下单模块: 一般情况下,下单模块都会有如下的信息,订单的信息,产品的信息及谁下的单(买家信息).这是基本的,那么我们设计的时候就要把相关的功能内聚到一起.当然这是从大功能(下单管理)上来说…
---恢复内容开始--- 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. 粗劣的说就指的是:单独模块间有着强大的凝聚力,不同的模块之间又是相对来说独立的 内聚: 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高. 所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则. 耦合: 一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系.指…
前言 在软件项目开发过程中,我们总能听见“高内聚,低耦合”,即使这种思想在我们学习编程的过程中就已经耳濡目染.可一旦当我们上项目,赶进度的时候我们就会“偷懒”,能省时间就省.管他什么设计模式,什么软件架构先实现上线再说.当然,如果这是一个一次性项目,或者是一个比较简单的项目还好说,但如果这个项目牵扯到后期的维护再开发,那么之前的“偷懒”就会成为“技术债”.最近刚研究完EF框架,写个demo练练手,正好贴出来做个抛砖引玉的作用.希望大家一起讨论,共同进步! 基础框架搭建 基础架构也就是常用的三层架…
GRASP原则九: 隔离变化  Protected Variations  需求一定会变化的!如何做到以系统的局部变化为代价就可以应对这一点?4.1 GRASP rule9: Protected Variations  Name: Protected Variations 隔离变化  Problem: 如何设计对象.系统和子系统,使得这些成分里面的变化因素. 不稳定因素不会对系统的其余 部分造成意想不到的影响? How to design objects, systems and sub…
GRASP原则六: 多态 Polymorphism  How to handle alternative behaviors based on type 如何处理依据类型不同而有 不同行为的一类需求 ?  比如,开餐馆  苏州人喜欢甜.四川人喜欢麻.湖南人喜欢辣,咋处理 ?1.1 9条GRASP原则  Information Expert  responsibilities should be assigned to objects that contain relevant info…
1.GRASP原则一: 创建者 Creator  Who should be responsible for creating a new instance of some class 由谁来负责创建某个类的新实例(对象)1.1 GRASP 原则  GRASP  General Responsibility Assignment Software Patterns  初学对象技术的同学,在编码或绘制交互图和类图时,应该理解并应用 GRASP的内在思想, 以便尽快地掌握这些基本原则,它们是…
分别描述的是模块内部特征,和模块外部引用关系. 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高. 内聚是就其中任何一个模块的内部特征而言的. 耦合是就多个模块组成的系统中各个模块的关联关系而言的. 高内聚是说模块内部要高度聚合,低耦合是说模块与模块之间的藕合度要尽量低.前者是说模块内部的关系,后者是说模块与模块间的关系. 起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性.…
•前言 如果你涉及软件开发,可能会经常听到 "高内聚,低耦合" 这种概念型词语. 可是,何为 "高内聚,低耦合" 呢? •概念 "高内聚,低耦合" 是相对于代码而言,一个项目中: 每个模块之间相互联系的紧密程度,模块之间联系越紧密,则耦合性越高,模块的独立性就越差,反之同理: 一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句.程序段)之间的联系程度越高,则内聚性越高,即 "高内聚" : 如:一个项目中有20个方法调用…
1. 前言 第一次接触 Python 语言的 IO API 时,是惊艳的.相比较其它语言所提供的 IO 流 API . 无论是站在使用者的角度还是站在底层设计者的角度,都可以称得上无与伦比. 很多人在学习 JAVA 语言中的 IO 流 API 时,几乎是崩溃的.其 API 太多.API 之间的关系过于复杂.类的层次结构需要花费很多时间才能搞明白.API 设计者未免有炫技之嫌. 而 Python 的 IO 流操作,才真正应了哪句话:人生苦短,我学 python . 以 open( ) 函数 为操作…
atitit. 深入理解 内聚( Cohesion)原理and  attilax大总结         1.1. 内聚的概念 1 1.1.1. 高内聚模式关于这个问题给出的答案是:分配职责,使其可保持较高的内聚性. 1 1.2. 所谓内聚(内聚有多种类型,包括偶然内聚.逻辑内聚.时间内聚.通信内聚.顺序内聚.功能内聚.信息内聚等,这里主要指的是功能内聚 2 1.2.1. 如果元素具有高度相关的职责,而且没有过多工作,那么该元素具有高内聚性. 2 1.3. 内聚按紧密程度从低到高排列次序为偶然内聚…
开头想明确一些概念,因为有些概念不明确会导致很多问题,比如你写这个框架为什么不去解决啥啥啥的问题,哎,心累. 什么是框架? 百度的解释:框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统.简单说就是使用别人搭好的舞台,你来做表演.但是更核心的是,作者通过框架更多的传达的不是技术的实现,而是一种设计思想的展现. 什么是模块化? 在jav…
低耦合 loosely Coupling 松散的耦合关系=炮友 couple=夫妻 夫妻=法律约束.家庭.生活.财产.繁衍 炮友:吃喝玩乐,不会产生感情方面的依赖       内聚性 内聚性又称块内联系.指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量.若一个模块内各元素(语名之间.程序段之间)联系的越紧密,则它的内聚性就越高.  内聚性匪类(低――高): 偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;功能内聚; 1 偶然内聚: 指一个模块内的各处理元素之间没有任何联系…
说明与目录 在学习本章内容之前,最好是具备react中'插槽(children)'及'组合与继承' 这两点的知识积累. 详情请参照React 精要面试题讲解(四) 组合与继承不得不说的秘密. 哦不好意思忘记了,四还没写呢.==!回头补上. __首先,我们要知道高阶组件能够做到什么: 对复用UI.数据逻辑等进行封装,对参数组件进行制式处理,从而让参数组建具备特定的ui或功能__ 那么本节的学习目录: 高阶函数的认知 类的修饰器(decorator)的认知(类比高阶函数) 高阶组件的认知(类比修饰器…
前言 即便想 nginx 这么牛B的服务器, 也不能保证他不挂啊, 就算不是机器出故障, 比如, 停电了, 那么机器挂了, 很正常啊. 这时候, 没有分发服务器, 网站就不能正常访问了, 咋搞? 网站不开了, 大家放假回家咯! - 不错的办法啊. 我们想回家, 但是老板不许, 没办法, 加个备份机吧, 有点像是备胎. 可以借助 keepalived + nginx 来实现主备. 一. keepalived是干啥的 keepalived主要的工作就是检测 web 服务器的状态, 如果有一台 web…
这个也好理解 ,这个合成/聚合复用原则指的是在一个新的对象里面使用一些已有的对象,使其成为新对象的一部分.新对象通过委派达到复用已有功能的效果. 说到这里要讲提及到“Has-A” 和“Is-A”的区别: Has-A:表示某一个角色具有某一项责任. Is-A:表示一个类是另一个类的一种. 看看这一个原则听好理解的哈,因为我也经常在做功能提取,比如提取一些公共的算法什么的.最后达到复用的目的,从而避免了复制代码. 可这里所说的意思好像要在我这个之上,这里的意思是针对一个个的对象,我们可以把某一个业务…
函数接收的参数可以是数字,字符串,列表,元组,字典,集合,也可以是另一个函数,那么这个接收一个函数作为参数的函数就称为高阶函数 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" def Calculate(n): n = n+1 return n def Main(a,b,c): d = c(a) +c(b) print(d) Main(2,3,Calculate) 运行结果 还有一种是返回值中包含函数名 # -*- coding:u…
接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而不是面向实现类编程,以期通过这种方式来降低程序的耦合. 但是在讨论这些之前,我们先要搞清楚一个问题: 接口还是抽象类? 为什么会有这个问题,因为在某些情况下,接口和抽象类很像: 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其它类实现或者继承. 接口和抽象类都可以包含抽象方法,实现接口或者继承抽象…
我就举一个例子.比如,我想看电视,是否需要遥控器??请认真思考这个问题. 看似电视与“我”已经解耦了.然而,我需要通过遥控器去看电视,我的目的是看电视,但是我却需要依赖遥控器这个中间件.这就变相地将“我”与电视的依赖关系,变成了我与遥控器的依赖关系.虽然“我”与电视解耦了,但是“我”与遥控器却紧密联系在一起. 那么回到最初的问题,我的目的是看电视.我是否一定需要与电视解耦呢?答案是不一定!以此为基础,你可能会发明一个人可以直接控制电视的技术. 那么回顾历史.在智能手机终端发明之前,有一个阶段,人…
作者:褚超群 | 旷视科技 MegEngine 架构师 背景介绍 在算法研究的过程中,算法同学们可能经常会尝试定义各种新的神经网络层(neural network layer),比如 Layer Norm,Deformable Conv 等.为了实现这些层以进行实验,算法同学可以使用神经网络框架或者 numpy 中提供的基础操作(如张量/标量的加减乘除等)去组合出所需的层的功能.然而这通常会造成这些层的性能断崖式的下跌,大大影响了算法同学们尝试新算法的效率.所以很多情况下,算法同学们会选择为自己…
学习这个设计模式 真的觉得很抽象,只有自己多多的领会! 在很多时候,很多的知识都会觉得讲起来是很矛盾的. 本章目标 1 掌握内聚度和耦合度的概念 2 掌握面向对象设计原则  (一)如何衡量软件设计的质量 内聚度:表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关.(在我自己的理解就是:在一个类中完成自己所有的任务,这些任务都在自己的类中.自己的事情自己做) 耦合度:耦合度表示类之间关系的紧密程度.耦合度决定了变更一个应用程序的容易程度.在紧密耦合的类结构中,更改…
单一职责原则(SRP) 定义:系统中的每一个类都应该只有一个职责. 好处:高内聚.低耦合. 解释说明: 单一职责也就是说我们应该让一个类或一个对象只做一件事情,每个类所要关注的就是自己要完成的职责是什么,能够引起这个类变化的原因也应该只有一个,这也是后面提到的所有的设计模式都会遵守的一个原则. 高内聚:先按照面向对象的封装特性来理解,封装也就是我们说的,应该把一个类或对象它所有相关的属性.方法.行为放到一起,放到一个类中,这样就实现了一个封装的特性.那么内聚,就是一个类里面应该包含它所有的属性和…
类和对象&方法 ——类的定义 现实世界的事物 属性:人的身高,体重等 行为:人可以学习,吃饭等 Java中用class描述事物也是如此 成员变量:就是事物的属性 成员方法:就是事物的行为         定义类其实就是定义类的成员(成员变量和成员方法)   ——this 代表所在类的对象引用        记住:方法被哪个对象调用,this就代表那个对象 ——什么时候使用this呢? 现阶段,局部变量隐藏成员变量: 其他用法后面和super一起讲解 ——封装   隐藏对象属性和实现细节,仅对外提…