架构抽象化设计

栏目: Java · 发布时间: 6年前

业务研发,到了一定阶段需要对设计进行抽象化进行,抽象化两种方式一种是程序库,通过调用库形式实现代码重用,例如dll、so、jar包,另一种形式是通过服务形式,比如web服务soa以及当下微服务形式对业务模块进行抽象化设计。

架构抽象化设计

对于线上业务抽象化去实现,具体到实现方式上,在 java 语言上存在两种方式,一种jar包形式,一种是服务方式。两种方式各有优劣,两种方式结合着用,用两种方式优势,能够将架构实现更合理获得更多形式上重用。

jar包形式,将逻辑进行抽象实现,能够引入在业务服务中使用,使用jar包时要注意基于Spring jar,如果多线程使用时,要注意类引用方式,再多线程中单独加载,然后在使用。

throwable异常机制,整个异常指责链,异常继承体系要明确。避免异常捕获不到情况,导致程序异常。异常框架以及异常体系结构:

架构抽象化设计

thread local机制,thread local本身是绑定在每个线程上的对象,使用时需要thread local本身是静态的,这样才能保证变量是全局的且唯一。使用样例类似如下:

static ThreadLocal<XgBoostCompute> threadLocal = new ThreadLocal<XgBoostCompute>();

public void run() {

    xgBoostCompute = threadLocal .get();

    if ( xgBoostCompute == null ){

        xgBoostCompute = new XgBoostCompute();

        boolean bool = xgBoostCompute .load(Constants. MODEL_PATH );

        if (bool) {

            threadLocal .set( xgBoostCompute );

}

}

}

架构设计最终落到实现上,需要对使用到语言层面比如线程池、 synchronized 、countdownlatch 理解要深入,对于库层面 Spring 也是, 类似整体加载机制要明确,不然整个实现会遇到各种问题,会因为点的卡壳而花费大量时间。

对于synchronized在作用于块的时候,要锁定唯一对象,对象唯一性很重要不然可能导致锁不住,锁住后的整个流程单线程模式,所以锁住模块要尽量小,尽量小之后才能获得更高性能。

在有就是版本,spring版本是4就要注意spring-conifg.xml中头部head版本,版本不一致可能会导致整个个别功能起作用,部分功能不起作用,最近遇到4.0 spring配置文件3.0然后基于注解方式定时器不起作用。

架构设计本质上还是降低复杂度,实现业务需要,架构本身需要不断演进,不能期望一步到位,并且扩展性也是在一定范围内,而不是无限制可扩展性。架构取决于设计者对于业务理解深度,以及对于各种基础知识掌握以及熟练运用程度。

文章零散说了很多方面,其实说的就是一件事,架构设计到实现又一个巨大鸿沟以及一个漫长实现过程,需要对各个知识点以及库体系有相当了解,才能很好去实现,不然会导致事倍功半。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

开发高质量PHP框架与应用的实际案例解析

开发高质量PHP框架与应用的实际案例解析

Sebastian Bergmann / 刘文瀚、刘海燕 / 清华大学出版社 / 2012-6 / 49.00元

PHP已经成为最受欢迎的编程语言之一,这使得用PHP创建高质量、易维护的应用程序和框架比以往受到更多的青睐。通过使用来自于知名公司的真实案例研究,《开发高质量PHP框架与应用的实际案例解析》为Web软件体系结构的不同层次介绍了规划、执行以及测试自动化方面的内容,并解释了这些公司如何测量和测试软件质量。《开发高质量PHP框架与应用的实际案例解析》作者Sebastian Bergmann、Stefan......一起来看看 《开发高质量PHP框架与应用的实际案例解析》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具