首页 > 其他分享 >设计的一些常识--摘录其他网站

设计的一些常识--摘录其他网站

时间:2022-11-15 15:01:06浏览次数:49  
标签:拦截器 框架 -- 常识 接口 通常 Invocation 过程 摘录

1、API与SPI分离,API面向使用者,SPI面向扩展者

2、服务域、实体域、会话域分离

  1. 实体域 框架或组件,总会有核心领域模型,比如Spring的bean,Dubbo的service等,核心领域模型
    及其组成部分为实体域,代表我们要操作的目标本身。实体域通常是线程安全的,不管是通过
    不变类、同步状态、复制。

  2. 服务域 也称为行为域,是组件的功能集,同时也负责实体域和会话域的生命周期管理。比如Spring的
    ApplicationConext,Dubbo的ServiceManager。 服务域的对象通常比较重,而且是线程安全,以单一实例
    服务于所有调用。

  3. 会话域 会话重重要的概念是上下文,上下文通常持有交互国产重的状态变量等,会话对象通常较轻,
    每次请求都重新创建实例,请求结束后销毁

概况之,把元信息交由实体域持有,把一次请求的临时状态由会话域持有,由服务域贯穿整个过程

3、在重要的过程上设计拦截接口

如果是远程调用框架,那远程调用的过程应该有一个统一的拦截接口。如果是ORM框架,那至少SQL执行过程,
Mapping过程要有拦截接口。如果是Web框架,那请求的执行过程应该要有拦截接口。允许外置行为,是框架的
基本扩展方式。拦截接口,通常是把过程本身用一个对象封装起来,传给拦截器链。 比如:远程调用过程为
invoke(),那拦截器接口通常为invoke(Invocation),Invocation对象封装了本来要执行过程的上下文,
并且Invocation里有一个invoke()方法,由拦截器决定什么时候执行,同时,Invocation也代表拦截器
行为本身,这样上一个拦截器的Invocation其实是包装的下一拦截器的过程,知道最后一个拦截器Invocation
是包装的最终invoke()过程

4、重要的状态变更发送事件并留出监听接口

事件和拦截器的区别 拦截器是干预过程的,是过程的一部分,基于过程行为的。事件是基于状态数据的,
任何行为改变的相同状态,对事件应该是是一致的。事件通常是事后通知,是一个Callback接口,方法名通常
是过去式的,比如onChanged()。比如远程调用框架,当网络断开或连上应该发出一个事件,当出现错误也考虑
发出一个事件,这样便于外围应用观察到框架内部的变化,做出选择。

5、扩展接口职责尽可能单一,具有可组合性

比如,远程调用框架协议是可以替换的,如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持
细分为底层通讯、序列化、动态代理等。如果将接口拆细,正交分解,这样更便于扩展者复用已有逻辑,而只是
替换某部分实现策略,分解的粒度要把握好

6、微核插件式,平等对待第三方

Spring的微核是BeanFactory,通常核心是不该带有功能性的,而是一个生命周期和集成容器,这样各功能
可以通过相同的方式交互扩展,并且任何功能都可以被替换,如果做不到微核,至少要平等对待第三方,即
原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到

7、不要控制外部对象的生命周期

框架最多提供工具类辅助管理,而不是绝对控制

8、可配置一定可编程,并保持友好的COC约定

使用环境的不确定因素很多,框架总会有一些配置,一般都会到classpath扫描某个
指定名称的配置,或者启动时允许指定配置路径。一个通用框架,要做到凡是能配置
文件做的一定要能通过编程方式进行,否则当使用者需要将框架与另一个框架集成时
会带来很多麻烦。另外,尽可能做一个标准约定,如果用户按某种约定做事,就不要
该配置项

9、区分命令与查询,明确前置条件与后置条件

这是契约式设计的一部分,尽量遵守有返回值的方法查询方法,void返回的方法是命令,
查询方法通常是幂等性的。另外,每个方法都尽量前置断言传入参数的合法性,后置断言
返回结果的合法性,并文档化

标签:拦截器,框架,--,常识,接口,通常,Invocation,过程,摘录
From: https://www.cnblogs.com/codechange/p/16892423.html

相关文章

  • pom.xml图标变成蜘蛛怎么办
    IDEA的pom.xml文件上面有蜘蛛标志,这种情况是由于不小心点击AddasAntBuildFile,然后pom.xml就成蜘蛛标志了,点开Ant,一般右侧会有Ant,若没有就点上方工具栏的Views—>Tool......
  • Windows命令行调节电脑分辨率
    利用nircmd1、下载nircmdhttp://www.nirsoft.net/utils/nircmd.html进入网址后,拉到网页最后面,根据自己系统下载32或者64位  2、解压nircmd  3、进入nircmd......
  • 直播CDN调度技术关键挑战与架构设计
    作者:胡济麟1、背景介绍1.1直播业务特点互联网视频直播是一种消息媒介形态,提供时产时消的内容,经过多年,已经发展出秀场、游戏、电商、体育等多种业务形态。主要特点是:内容实......
  • C# 锁汇总
    一、前言本文章汇总c#中常见的锁,基本都列出了该锁在微软官网的文章,一些不常用的锁也可以参考微软文章左侧的列表,方便温习回顾。二、锁的分类2.1、用户模式锁1......
  • 云服务器的体验分享
    之前一直没注意到厂商可以提供免费的服务器,这里推荐官网地址:https://www.sanfengyun.com,有兴趣的小伙伴可以研究一下提供了"免费虚拟主机"“免费云服务器”等免费产品,......
  • Day5-4 递归
    递归递归就是:方法调用自己利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需......
  • Android 多module情况下module依赖aar问题处理
    原文:Android多module情况下module依赖aar问题处理-Stars-One的杂货小窝问题描述负责一个大项目Android工程项目,新增了一个module,而此module由于sdk的关系,需要引入SDK......
  • 比较两段文本的相似度
    比较两段文本的相似度该方法的原理:逐行查找第二个文本是否有第一个文本内该元素的匹配序列,有则认为是重复的,最终输出一个匹配度fromdifflibimportSequenceMatcherd......
  • CANN 6.0来了,硬核技术抢先看
    摘要:在华为全联接大会2022期间,华为正式官宣昇腾AI异构计算架构CANN6.0版本将在年底正式发布。本文分享自华为云社区《昇腾AI异构计算架构CANN6.0全新开放升级,全面释放AI......
  • 给adobe reader 添加书签功能
    Pleasereferto HowtoBookmarkPagesinaPDFDocumentinAdobeReader个人喜欢两种方法:1.打开恢复上次阅读功能。Edit>Preferences->Documents->Restorela......