学习
实践
活动
专区
工具
TVP
写文章

接口设计原则

注:在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。 三. 接口隔离原则: 接口这里指用interface关键字定义的接口。 保证接口的纯结性: 接口要尽量小。 接口要高内聚。 定制服务。 接口设计是有限度的。 最佳实践: 一个接口只服务于一个子模块或业务逻辑。 通过业务逻辑压缩接口中的public方法,接口时常去回顾,尽量让接口达到“满身筋骨肉”,而不是“肥嘟嘟”的一堆方法。 已经被污染了的接口,尽量去修改,若变更的风险较大,则采用适配器模式进行转化处理。 了解环境,拒绝盲从。每个项目或产品都有特定的环境因素,不要盲从大师的设计,要根据业务逻辑进行最好的接口设计

3.7K30

6设计原则之接口隔离原则

接口隔离原则的定义 什么是接口. 实例接口,比如定义了一个Person类,然后 Person p = new Pserson(); 产生一个实例,Person类就是 p 的接口接口,就是Java中使用 interface 定义的接口 在使用时的时候通过接口调用.接口是我们设计时对外提供的契约,通过分散定义多个接口,可以预防未来变更的扩散,提高系统的灵活性和可维护性. 定制服务,定制服务就是单独为一个个体提供优良的服务,只提供访问者需要的方法 接口设计是有限度的,接口设计粒度越小,系统越灵活.但是,灵活的同时也带来了结构的复杂化,开发难度增加,可维护性降低,所以接口设计一定要注意适度 . ---- 接口隔离原则就是对接口的定义,同时也是对类的定义,接口和类尽量使用原子接口或原子类来组装.

55510
  • 广告
    关闭

    【限时特惠】腾讯云大数据产品,爆品秒杀1折起!

    移动推送、BI、云数仓Doris、ES、数据湖DLC、WeData、流计算Oceanus,多款产品助您高效挖掘数据潜力,提升数据生产力!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【程序设计】6设计原则之接口隔离原则

    背景: 在实际的业务开发中往往会因为初期的设计不合理,使得接口中定义了众多方法,而这些接口在实现类中又并不需要全部实现。 这样的接口定义是不利于扩展的,也将对后期的维护带来困扰,我们将通过示例来演示符合接口隔离原则带来的好处。 概念: 接口隔离原则的定义: 客户端不应该被迫依赖于它不适用的方法 接口隔离原则的要求: 将臃肿庞大的接口拆分成更小的和更加具体的接口,保证客户端只得到自己需要的方法 案例: 需求: 设计HomePage 再比如说通过Sql来操作数据库的时候,对数据库的操作往往都包括,打开数据库,连接数据库,关闭数据库,往数据库添加数据,删除数据,更新数据和查询数据,同样都是对数据库的操作但往往这些操作会大致的分成两类来进行设计 按照合理的设计进行符合接口隔离原则的拆分对实现代码高内聚,低耦合将变得尤为重要。

    12520

    设计模式 ☞ 七设计原则之接口隔离原则

    过大的接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码  ⑤ 如果接口的粒度大小定义合理,能够保证系统的稳定性;但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大 接口设计粒度是越小系统越灵活,这是不争的事实,但是这就带来的结构的复杂化,开发难度增加,维护性降低,这不是一个项目或产品所期望看到的,所有接口设计一定要注意适度。 接口隔离原则是对接口的定义也同时是对类的定义,接口和都尽量使用原子接口或原子类来组装,但是这个原子该怎么划分是这个模式也是设计中的一难题,在开发中一般遵循一个接口只服务于一个子模块或者业务逻辑的原则。 接口隔离原则和其他的设计原则一样,都是需要花费较多的时间和精力来进行设计和筹划,但是它带来了设计的灵活性,让你在业务人员在提出“无理”要求的时候可以轻松应付。 答案是根据经验和常识决定接口的粒度大小,接口粒度太小,导致接口数据剧增,开发人员呛死在接口的海洋里;接口粒度太大,灵活性降低,无法提供定制服务,给整体项目带来无法预计的风险。

    1.2K20

    Java设计模式:(1)设计模式七设计原则-接口隔离规则

    基本介绍 客户端不应该依赖它不需要的接口,既一个类对另一个类的依赖应该建立在最小的接口上 举个例子1 ? 上图1中,类B实现了接口Interface1; 类D实现了接口Interface1; 类A通过接口Interface1分别依赖类B,但只使用接口的1,2,3三个方法; 类C通过接口Interface1 Interface1依赖B,类C通过接口Interface1依赖D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D就不必去实现它们不需要的方法 按照接口隔离原则应当这样处理: 将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。 例子2使用接口隔离原则改进: 1)将接口Interface1拆分为独立的三个接口,类A和类C通过接口隔离原则分别与他们建立依赖关系 public class Segregation2 { public

    20710

    设计模式 - 六设计原则之ISP(接口隔离原则)

    接口隔离是为了高内聚、低耦合。 在实际的开发中,通常都是先定义好需要开发的接口,并由各个服务去实现。 但是如果没有经过考虑和设计,很可能造成一个接口中包含了众多的接口方法,而这些接口并不一定在每一个类中都需要实现, 这样的接口很难维护, 也不易于扩展,每一次修改验证都有潜在的风险。 在具体应用接口隔离原则时, 应该根据以下几个规则进行考量 接口尽量小,但应该有限度。 一个接口只服务于一个子模块或者业务逻辑 为依赖接口的类定制服务, 只提供调用者需要的方法,屏蔽不需要的方法。 ,非常不符合设计模式,也不易于维护。 因为不仅无法控制外部的调用,还需要维护对应的文档来说明这个接口不需要实现。 ---- Better Impl 接口隔离改善代码 按照接口隔离原则,应该在确保合理的情况下,把接口细分。

    21430

    .NET Core开发的iNeuOS工业互联平台,四特性:数据接口、图元绑定数据、预警和菜单

    演示信息       在线演示:http://demo.ineuos.net  (注:服务器比较慢,请耐心等待。 自已注册用户,体验系统功能)       视频演示:http://www.ineuos.net/video/iNeuOS%20and%20app.mp4       驱动开发:http://www.ineuos.net (2)通过Http API接口主动推送数据到平台,参见:《第三方数据导入接口》第三方导入接口部分。(3)在iNeuView开发页面配置接口,主动读取数据。 如下图:       需要配置三类数据接口:最新数据接口、历史数据接口数据接口。 历史数据接口对应的应用,如下图:       数据接口对应的应用,如下图:       单击蓝色最新数据接口、历史数据接口数据接口文字,会显示帮助文档,规定的请求参数和返回的数据结构。

    31100

    数据设计范式

    为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。 这样设计才算满足了数据库的第一范式,如下表所示。 ? 上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。 这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

    784120

    ASP.NET设计应用程序的七绝招

    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基本的原理,更要多多实践,从实践中获取真正的开发本领。 有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览它。 2. 滚动DataGrid 这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只有固定的一个地方给你显示它了。 动态创建控件 利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。 对于非ASP.NET的标准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性 asp:ImageButton id=“foo” ImageUrl

    23650

    设计模式六原则(四)----接口隔离原则

    (3)单一职责原则更加偏向对业务的约束: 接口隔离原则更加偏向设计架构的约束。这个应该好理解,职责是根据业务功能来划分的,所以单一原则更加偏向业务;而接口隔离更多是为了“高内聚”,偏向架构的设计。 使用多个专门的接口能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。 能减少项目工程中的代码冗余。过大的接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。 4)接口设计是有限度的 了解环境,拒绝盲从。每个项目或产品都有选定的环境因素,环境不同,接口拆分的标准就不同, 需要深入了解业务逻辑。 五. 一: 最初的设计 通常我们设计接口的方式如下: public interface IStudentScore { // 查询成绩 public void queryScore(); 使用接口隔离原则的设计 采用接口隔离原则设计接口, UML图如下: public interface IQueryScore { // 查询成绩 public void queryScore

    86141

    数据设计原则,还有数据设计范式

    如果大家有了解过数据设计的话,那么以下的内容就很容易理解了。数据设计主要是要根据用户的需求去设计和建立的一个过程。感兴趣的小伙伴们,接下来我们一起看看数据设计吧。 数据设计原则 首先我们看看一对一设计原则,在软件开发过程中,必须要遵循这个原则,原因是可以减少问题的出现,做到一个维护的作用,会避免数据杂现出现。 第二是独特命名原则,作用又有哪些呢? 可以减少重命名和规范名的出现,还能够去减少数据冗杂。 第三是双向原则,主要能够保证到及时更新,非事物单位上还能提供保障。 image.png 数据设计范式 什么是数据设计范式,简单来说是数据设计的一种存储性能,与开发人的操作数据有关,是需要满足一些规范来优化数据的存储方式。 以上内容就是今天所要了解的数据设计原则以及三设计,如果大家对本文有哪些不理解的地方,都可以提出来,小编一一一为大家解答。

    87720

    设计模式六原则(4):接口隔离原则

    (图1  未遵循接口隔离原则的设计)          这个图的意思是:类A依赖接口I中的方法1、方法2、方法3,类B是对类A依赖的实现。 如果将这个设计修改为符合接口隔离原则,就必须对接口I进行拆分。在这里我们将原有的接口I拆分为三个接口,拆分后的设计如图2所示: ? 在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。          采用接口隔离原则对接口进行约束时,要注意以下几点: 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。 使接口用最少的方法去完成最多的事情。 运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。

    65770

    设计模式】软件设计原则 ( 接口隔离原则 | 代码示例 )

    2、接口 2 3、接口 3 4、接口 4 5、实现类 一、接口隔离原则简介 ---- 接口隔离原则 : 用 多个 专门的 接口 , 不使用 单一 的总接口 , 客户端 不应该依赖 它 不需要的 接口 ; 一个类 对 另一个类 的依赖 , 应该建立在 最小接口 上 ; 如果 有一个 接口 , 里面有 很多方法 , 如果使用一个类 实现该接口 , 所有的类都要实现 ; 建立 功能 单一接口 , 不要建立 庞大 臃肿 的接口 ; 尽量细化接口 , 接口中的方法尽量少 ; 接口设计适度原则 : 接口隔离原则 中 最重要的就是 注意 适度原则 , 一定要适度 ; 接口设计的 过大 , 过小 , 都不合适 ; 设计接口时 , 多花时间去思考策划 ; 接口方法 尽量少 , 但要有限度 , 对接口进行细化 , 肯定能 提高系统设计的灵活性 , 但是如果 接口设计的过小 , 方法过少 , 则会 造成接口数量过多 , 提高整个程序设计的复杂性 ; 接口隔离原则 优点 : 符合 高内聚 , 低耦合 的 设计思想 , 使得类具有很好的 可读性 , 可扩展性 , 可维护性 ; 降低耦合 : 平时设计接口时 , 只暴露客户端需要的方法

    11630

    mysql 数据设计范式

    什么是设计范式 ---- 设计表的依据,按照范式设计出来的表,不会出现数据的冗余 数据库的设计范式是数据设计所需要满足的规范,满足这些规范的数据库是简洁的、结构清晰的;反之则是乱七八糟,不仅会给开发人员制造麻烦 ,而且还可能存储了大量不需要的冗余数据 不仅仅只有三范式,还有第四范式、第五范式、第六范式等,通常来讲,满足三范式就基本足够 项目的数据设计并不一定要完全满足于三范式,有些时候我们会适量的冗余让 三范式 ---- 第一范式(1 NF):要求属性(列)具有原子性,即每列都是不可再分解的数据 虽然第一范式要求各列保存原子性,不能再分解,但是这种要求是和我们的需求相关联的,不拆分也行;如果要考虑可扩展性 如下表所示,没有根据城市筛选用户的需求,可以这样存储城市数据 id name address 1 张三 河南省开封市兰考县 2 李四 广东省深圳市福田区 对 address 进行拆分,使其具有原子性( 如果要出现不完全依赖主键,只可能发生在联合主键的情况下 第二范式是对记录的唯一性约束,要求有唯一性标识,即实体的唯一性,如下所示:即可 name 和 address 完全一致,但是主键值是不一样的,这样就实现了数据的唯一性

    17610

    面向对象设计的五原则 —— 接口隔离原则

    面向对象设计的五原则是什么?  接口隔离原则 :ISP 设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对该模块做出抽象。设想该模块由一个类实现,我们可以把系统抽象成一个接口。 这样一来,这些行为可能就会导致接口代码臃肿,冗余,导致资源的浪费。 简单的说,每一个用户不应该被强迫实现一些他们不会使用的接口,应该将接口详细分组,保证每个接口服务于一个子模块。 接口污染 过于臃肿的接口设计是对接口的污染。所谓接口污染就是为接口添加不必要的职责,给接口带来维护困难和重用性差的方面问题。 “接口隔离”其实就是定制化服务设计的原则。 使用接口的多重继承实现对不同接口的组合,从而对外提供组件式服务,达到 按需提供服务 。

    26120

    浅谈数据设计之三范式

    实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。 数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5N一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。 符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。 1NF-第一范式 数据表的每一列都要保持它的原子特性,也就是列不能再被分割。 不是一定需要遵守,比如有时候,数据不冗余也不是好事。所以,我们要根据需要来定义,建立在需求之上。 没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,适当保留冗余数据。 一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。!!!

    41220

    面象对象设计6原则之四:接口隔离原则

    接口隔离原则(ISP),The Interface Segregation Principle 定义 客户端不需要强迫依赖那些它们不需要的接口。 类与接口的依赖应该建议在最小的接口上,也就是说接口应该最小化,不能建立在一个庞大的接口之上,接口合理地按功能职能分成更细的几个单一的子接口。 如果一个接口定义并公布过多的方法,会导致所有的实现类必须要实现接口的方法,可能不同的业务场景不需要实现,所以接口隔离的原则就是只实现他们需要的接口。 像spring中的BeanFactory定义了bean的各种最基本的操作的方法,而BeanFactory下面又有3个扩展的子接口,扩展的子接口拥有父接口的全部方法并且拥有自己的独特的方法,我们可以按需要直接实现父接口或者实现子接口 ,这样就达到了接口隔离的原则,使接口最小化。

    703100

    数据设计范式趣解—数据库理论

    数据范式第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。 主键与外键的设计,在全局数据库的设计中,占有重要地位。 当全局数据库的设计完成以后,有个美国数据设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。 当PK是字段名的组合时,建议字段的个数不要太多,多了不但索引占用空间,而且速度也慢。8. 转载本站文章《数据设计范式趣解—数据库理论》,请注明出处:https://www.zhoulujun.cn/html/DB/sql/2017_0329_7968.html

    7510

    PDF.NET开发框架“内存数据库”架构设计

    前一段时间,我写了篇《移花接木:当泛型方法遇上抽象类----我的“内存数据库”诞生记 》,记录了PDF.NET内存数据库的设计过程,最近做了些小改动,已经投入生产使用了,目前运行良好。 今天重新看了看源码,觉得有必要画一个内存数据库的架构图,因为整个程序的核心代码加上详细的文件注释,才391行代码,时间长了恐怕无法了解整个程序的设计思路。 先直接上图,再说明架构的设计问题: ? 3,ICacheProvider 缓存提供程序接口 定义了一套缓存使用的方法,可以指定缓存策略,如相对过期、绝对过期等。 4,缓存提供程序 系统缓存的默认实现了Memory CacheProvider ,也就是内存缓存提供程序;由于采用接口设计,所以理论上也可以扩展为第三方的“分布式缓存”。 由于PDF.NET实体类的独特设计,使得它的序列化和反序列化效率非常高,另外不使用反射,性能也很好,而且,最重要的,它没有关系数据库那一套“沉重”的数据库元数据标识,所以它非常轻巧,适合作为内存数据数据的最佳载体

    80870

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 腾讯云图数据可视化

      腾讯云图数据可视化

      腾讯云图 (TCV)是一站式数据可视化展示平台,旨在帮助用户快速通过可视化图表展示海量数据,10 分钟零门槛打造出专业大屏数据展示。精心预设多种行业模板,极致展示数据魅力。采用拖拽式自由布局,无需编码,全图形化编辑,快速可视化制作……

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注腾讯云开发者

      领取腾讯云代金券