chvnetcom 2013-03-09
提高软件系统的可维护性和可复用性是面向对象设计的核心问题。
设计原则:
开闭原则 OCP
里氏代换原则 LSP
依赖倒转原则 DIP
接口隔离原则 ISP
组合/聚合复用原则 CARP
迪米特法则 LoD
开闭原则讲的是对抽象层关闭,对实现层开放(对扩展开放,对修改关闭)
【闭】 抽象层 (不允许更改,预见所有可能的扩展)
|
【开】 实现层 (允许扩展)
理解策略模式对开闭原则的支持
-----
//其他设计原则,后续慢慢补充
随着业务的发展,系统架构从单体架构变为面向服务架构,水平分层架构;再变为微服务架构,合法性校验包括:常规性校验以及业务校验; 常规性校验:包括必填字段校验,长度校验,类型校验,格式校验等; 业务校验:根据实际业务而定,比如订单金额不能小于0等;其他情况下
大家好,今天给大家带来是哈喽沃德先生的《微服务架构的前世今生》,上一篇用2个故事向大家说明了SOA 与微服务的区别。一共有以下四个原则。业界对于可扩展的系统架构设计有一个朴素的理念,就是:通过加机器可以解决容量和可用性问题。用个段子描述就是:世界上没有什么
设计模式通常用于软件开发过程中,它们提供了软件开发过程中面临的一般问题的最佳解决方案。不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。Interface Segregation Principle,简称ISP;类间的
函数是程序员的工具中最重要的抽象形式。它们能更多地被重复使用,你需要编写的代码就越少,代码也因此变得更可靠。较小的函数遵循单一职责原则更有可能被重复使用。你应该尽量减少函数之间的隐式共享状态,无论它是文件作用域的变量还是对象的成员字段,这有利于明确要求把值
高层模块不依赖底层模块,二者都依赖其抽象。抽象不依赖于细节,细节依赖于抽象。
众所周知,面向对象的设计原则是面向对象编程的核心。但是,如今有许多Java程序员在追求诸如Singleton、Decorator或Observer等设计模式的同时,却忽略了面向对象的分析和设计。我们除了要学习诸如抽象、封装、多态和继承之类的基础知识,还需要
概念理解: 1个类只负责一个功能领域中的相应职责。对第2条具体做法:在 成员类型声明,参数类型,方法返回类型,数据类型转换时,不要用具体类,而是用接口和抽象类来声明。这些对象在定义时使用的是抽象类型,在运行时在传入具体类型的对象,有子类对象来覆盖父类对象。
因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。 每一种设计模式并不是单一的体现某一个设计原则,事实上,很多设计模式都是融合了很多设计原则的思想,并不好特别强调设计模式对某个或某些设计原则的体现。 这些设计原则只是一个建议指
微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活、更能适应现在需求快速变更的大环境。本文将介绍微服务架构的演进、优缺点和微服务应用的设计原则,然后着重介绍作为一个“微服务应用平台”需要提供哪些
积分赚取渠道,比如下订单、每日签到、评论等;积分消费渠道,比如抵扣订单金额、兑换优惠券、积分换购、参与活动扣积分等;用户在获取积分的时候,会告知积分的有效期;用户在查询积分明细的时候,会显示积分的有效期和状态;积分到期之后会作废;在消费积分的时候,优先使用
高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。代码要依赖于抽象的类,而不要依赖于具体的类。要针对接口或抽象类编程,不要针对具体实现类编程。为什么使用依赖倒置原则?首先看一个违反DIP的示例,按钮控制开灯和关灯。改
面向对象设计的目标之一在于支持可维护性复用,一方面 需要实现设计方案或者源代码的复用,另一方面要确保系统的能够便于扩展和修改,具有良好的可维护性。面向对象设计原则则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式之中,它们是从许多设计方案中总结出的指导
开闭原则是我们在面向对象编程时候需要时刻注意的一点,即一个软件实体应该对扩展开放,而对修改关闭。用面向对象的语言来讲,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层.1,通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在
本文和您一起讨论十二种值得遵循的,从单体架构向微服务转型的设计原则与优秀实践。一直以来,这种单体架构本身和与之相关的维护极具复杂性,而且开发与迭代速度也相当缓慢。它代表了众多小型、自动化和自包含的服务的单一集合。
设计模式是面对具体问题,进行抽象分类,然后总结出来的行之有效的解决方案,就像人去创造历史。设计原则是进一步研究这些解决方案,进一步抽象出的指导思想。如果把设计模式比喻成传统数学,即“1+1=2”的那套理论,那么设计原则就是现代数学,也就是“1+1=1”的这
功能相同,可以有不同的设计方案来实现。随着需求增加,设计的作用才能体现出来。2) 让每个程序只做好好一件事。4) 舍弃高效率而取可移植性。5) 采用纯文本来存储数据。6) 充分利用软件的杠杆效应。7) 使用shell脚本来提高效应和可移植性。8) 避免强制
2015年, Facebook开源GraphQL。此后,它在前端Web中大受欢迎。传统的REST API有何不足?在本文中,我们将深入探讨GraphQL的设计原则,比较 GraphQL 与 REST 的异同,并讨论GraphQL 相对其他架构的优点。1你的
单一职责原则又称单一功能原则,单一职责原则规定:一个类应该只有一个发生变化的原因。所谓职责是指类发生变化的原因。如果一个类承担的职责过多,职责间可能会相互耦合。一个职责的变化可能会对其他职责造成影响。想要避免这种现象的发生,就要尽可能的遵守单一职责原则。复
开闭原则由勃兰特·梅耶提出,他在 1988 年的著作《面向对象软件构造》中提出:软件实体应当对扩展开放,对修改关闭,这就是开闭原则的经典定义。开闭原则是面向对象程序设计的终极目标,它使软件实体具备稳定性和延续性的同时拥有一定的适应性和灵活性。用户窗体可以根
通俗的说,即一个类只负责一项职责。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。而避免出现这一问题的方法便是遵
一性索引的值是唯?一的,可以更更快速的通过该索引来确定某条记录。用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。立索引,可以提?目不不是越多越好。用磁盘空间,索引越多,需要的磁盘空间就越?用数据量量少的索引。经常需要order by、group
产品的设计超出设计需求、完成的产品对于用户过度复杂、技术实现复杂到令他人难以理解都是过度设计的表现。AKF立方体中的X轴扩展,即水平扩展。建议将会话数据保存在用户cookie中,可以减少系统查询会话数据的负担并容易水平扩展。但要尽量控制cookie的大小,
看看这篇针对Java开发人员的SOLID设计原则简介。抽丝剥茧,细说架构那些事——。当你刚接触软件工程时,这些原理和设计模式不容易理解或习惯。我们都遇到了问题,很难理解SOLID + DP的思想,甚至很难正确实施它们。的整个概念,以及如何实施设计模式,这需
类应该描述一个单一的实体,而所有的类操作应该在逻辑上相互配合,支持一个一致的目的。 遵循标准Java程序设计风格和命名习惯。 一个类应该使用private修饰符隐藏其数据,以免用户直接访问。 接口和抽象都可以用于为对象指定共同的行为。通常,比较强
面向对象基本原则- 单一职责原则与接口隔离原则面向对象基本原则- 里式代换原则与依赖倒置原则面向对象基本原则- 最少知道原则与开闭原则。单一职责原则的英文名称是 Single Responsibility Principle,简称SRP。There sho
我说到SOA是一个特别大的话题,不但没有绝对统一的原则,而且很多原则本身的内容也具备相当模糊性和宽泛性。虽然我们可以说SOA ≈ 模块化开发 + 分布式计算,但由于其原则的模糊性,我们仍然很难说什么应用是绝对符合SOA的,只能识别出哪些是不符合SOA的。
当你是软件工程的新手时,S.O.L.I.D.原则和设计模式是不容易理解或习惯的。我们都有问题,很难掌握SOLID+DP的思想,更难以正确实施。事实上,如何实现设计模式需要时间和大量实践。我可以说实话,关于SOLID设计模式以及TDD等其他领域,从本质上讲,
HTML5是万维网核心语言HTML的第五个主要版本,本文档描述了HTML发展工作组使用的一套指导原则。在设计HTML时,这些原则提供了在兼容性、实用性、可交互性领域的指导。HTML工作组有来自很多不同社区包括WHATWG和其他W3C工作组的代表。而HTML
大量互联网公司都在拥抱SOA和服务化,但业界对SOA的很多讨论都比较偏向高大上。本文试图从稍微不同的角度,以相对接地气的方式来讨论SOA, 集中讨论SOA在微观实践层面中的缘起、本质和具体操作方式,另外也用相当篇幅介绍了当今互联网行业中各种流行的远程调用技
扁平化设计 – 设计群体实在无法停止谈论它。这种设计感觉很强烈。大多数设计师既不能充分捕捉这个潮流,也不能完全讨厌它。好的设计是与创造一些有用的东西有关。如果答案在于扁平时尚的设计,那就顺其自然。但这个趋势可能不是对所有项目都行得通,因此这不应该是强制性的
高层模块不应该依赖低层模块,两者都应该依赖其抽象;高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。在Java语言中,抽象就是指接口或抽象类,两者都不能直接被实例化;细节就是实现
用冒号作为分割是设计key的一种不成文的原则,遵循这种格式设计出的key在某些redis客户端下可以有效的识别;但是,在关系型数据中,除主键外,还有可能根据其他列来查询。如上表中, username 也是极频繁查询的,往往这种列也是加了索引的。转换到k-v
本文作者叫Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。他是Apache Axis2项目的联合创始人,也是Apache Software基金会的成员。Srinath撰写了两本关于MapReduce和许多技术文章的书。他获得了
六大设计原则1. 单一职责原则:对于一个类,应该只有一个引起它变化的原因;2. 里氏代换原则:子类必须能够替换掉它们的父类型;3. 开放-封闭原则:对于扩展是开放的;对于修改是封闭的。如果其中一个类需要调用另一个类的某个方法,可以通过第三方转发这个调用。
驱动用户传播,或者说触发用户传播,是需要一个驱动力的。没有驱动力,增长策略无论设计得多么好,都将失败。可参考之前的文章《传播本身就是一种需要》。传播力的三个法则:表达自我、协同关系、利益关系,核心其实都是在说传播的驱动力。这一点,是做增长的新手常犯的错误。
一个类只负责一件事。父类可以被子类无缝替换,且原有功能不受影响。使用多个专门的协议,而不是庞大臃肿的协议。一个对象对其它对象尽可能少的了解。高聚合,低耦合。
众所周知,架构师的角色,更偏向于策划、而非指挥,塑造、而非支配,其存在的意义,在于引导大家讨论、而非自己主宰一切。本文作者整理了 30 个公认的架构原则,来帮助大家解决此问题。他是 Apache 的核心成员,拥有 15 年分布式系统编程经验,设计了 Ap
仔细比较两套HIG的“设计原则”部分,发现完全是截然不同的两种风格。设计原则 这些设计原则是由安卓的用户体验团队制定并应用的,以此来保证用户心目中最佳的用户体验。应用开发者应该参考这些设计原则,并将之用于自己的创作与设计,有针对性地在用户体验方面进行实践。
数据的设计与抽象化
就一个类而言,应该仅有一个引起它变化的原因。如果一个类的职责太多,就等于把这些职责耦合在一起,一个职责的变化可能会影响这个类其他职责能力,这种耦合就会导致脆弱的设计。当发生变化时,设计会遭受到意想不到的破坏。软件设计真正要做的,就是发现职责然后将这些职责相
看到一篇不错的文章,很认同这些观点,分享一下。6) 在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。12)设计出的表要尽可能减少数据冗余,确保数据的准确性,有效的控制冗余有助于提高数据库的性能。
列簇尽量少,最好不超过3个。因为每个列簇是存在一个独立的HFile里的,flush和compaction操作都是针对一个Region进行的,当一个列簇的数据很多需要flush的时候,其它列簇即使数据很少也需要flush,这样就产生的大量不必要的io操作。在
说到设计模式就不得不说设计模式的六大设计原则;
“不要给我们打电话,我们会给你打电话”这是著名的好莱坞原则。在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。好莱坞,一个让许多俊男靓女欲罢不能的地方。你可能会
见此文,写的不错。尤其是那两个例子,一看就有点明白OCP了。对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立其工作,而不要对类尽任何修改。实现开放封闭的核心思想就是对抽象编程,而不对
软件设计的核心是提高软件的可复用性和可维护性。通常一个软件之所以可复用性和可扩展性差的原因在于设计过于僵硬,过于脆弱,复用率低,粘度过高等原因导致的,这时候需要想办法提高可扩展性,灵活性和可插入性,从而提高软件的可复用性和可维护性。一般可维护性和可复用性不