- 博客(16)
- 收藏
- 关注
原创 架构简洁之道-5.整洁架构
同样的,这一层的代码也会负责将数据从对业务实体与用例而言最方便操作的格式,转化为对所采用的持久性框架(譬如数据库〉最方便的格式。例如,在Java这一类的语言中,可以通过调整代码中的接口和继承关系,利用源码中的依赖关系来限制控制流只能在正确的地方跨越架构边界。最内层的圆中包含的是最通用、最高层的策略,最外层的圆包含的是最具体的实现细节。换句话说, 就是任何属于内层圆中的代码都不应该牵涉外层圆中的代码,尤其是内层圆中的代码不应该引用外层圆中代码所声明的名字,包括函数、类、变量以及一切其他有命名的软件实体。
2024-02-23 11:07:02
1602
原创 架构简洁之道-4.设计原则
将不稳定性(I)作为横轴,抽象程度(A)作为纵轴,那么最稳定、只包含抽象类和接口的组件应该位于左上角(0,1),最不稳定、只包含具体实现类,没有任何接口的组件应该位于右下角(1,0),他们连线就是主序列线,位于线上的组件,他们的稳定性和抽象程度相匹配,是设计良好的组件。位于(0,0)周围区域的组件,它们是非常稳定(注意这里的稳定指的是变更成本)并且非常具体的组件,因为他们的抽象程度低,决定了他们经常改动的命运,但是又有许多其他组件依赖他们,改起来非常痛苦,所以这个区域叫做痛苦区。
2024-02-23 10:40:07
984
原创 架构简洁之道-3.编程范式总览
三个编程范式,它们分别是结构化编程(structuredprogramming)、 面向对象编程(object”oriented programming)以及函数式编程(functional programming)。 结构化编程是第一个普遍被采用的编程范式(但是却不是第一个被提出的〉, 由 Edsger Wybe Dijkstra 于 1968 年最先提出。 与此同时, Dijkstra 还论证了使用 got。 这样的无限制跳转语句将会损害程序的整体结构。 接下来的章节我们还会说到,也 是这
2024-02-02 09:53:40
801
原创 架构简洁之道-2.两个价值维度
从系统相关方 (Stakeholder)的角度来看,他们所提出的一系列的变更需求的 范畴都是类似的,因此成本也应该是固定的。这个错误导致了重要的事被忽略了,重要的系统架构问题让位给了不重要的 系统行为功能。“ware” 的意思是“产品”,而“soft'’的意思,不言而喻,是指软件的灵活性。在这里你可以看到,软件的系统架构 那些重要的事情一一占据了该列表的 前两位,而系统行为-一那些紧急的事情一一只占据了第一和第二位。所以,平衡系统架构的重要 性与功能的紧急程度这件事,是软件研发人员自己的职责。
2024-02-02 08:30:00
1103
原创 架构简洁之道-2.乱麻系统
来说,这会带来很大的挫败感,因为团队中并没有人偷懒,每 个人还都是和之前一样在拼命工作。然而,不管他们投入了多少个人时间,救了多少次火,加了多少次班,他们的 产出始终上不去。工程师的大部分时间都消耗在对现有系统的修修补补上, 而不是 真正完成实际的新功能。这些工程师真正的任务是:拆了东墙补西墙,周而往复, 偶尔有精力能顺便实现一点小功能。然后为了加快发布的速度,拼命地往团队里加入新人,同 时加上决策层对代码质量提升和设计结构优化存在着持续的、长久的忽视,这种状 态能持续下去就怪了。
2024-02-01 16:17:45
187
原创 架构简洁之道-1.架构与设计究竟是什么
一个软件架构的优劣,可以用它满足用户需求所需要的成本来衡量。如果该成 本很低,并且在系统的整个生命周期内一直都能维持这样的低成本,那么这个系统 的设计就是优良的。如果该系统的每次发布都会提升下一次变更的成本,那么这个 设计就是不好的。一直以来,设计(Design)与架构(Architecture)这两个概念让大多数人十分 迷惑一一什么是设计?二者究竟有什么区别?本书的一个重要目标就是要清晰、明确地对二者进行定义。首先我要明确地说, 二者没有任何区别。软件架构的终极目标是,
2024-02-01 16:12:26
255
原创 java文件和字节数组之间的转换
public static void main(String[] args) throws IOException { File file = new File( "C:\\Users\\Administrator\\Documents\\WeChat Files\\x564236578\\FileStorage\\File\\2019-07\\...
2019-07-17 10:17:22
217
原创 Rabbitmq的基本使用(springboot 2.0.x)
1.首先了解一下我们为什么要是使用消息队列先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:解耦、异步、削峰。解耦看这么个场景。A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃......在这个场景中,A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关...
2019-06-24 15:26:14
299
原创 fastjson
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version></dependency> //将javabean转化成json...
2019-06-24 13:48:12
195
原创 springCloud学习第三天----远程调用feign
我们要新建一个springboot服务,user-consumer 除了和之前创建eureka-client步骤都一样以外还需要勾选feign支持我们在eureka-client中加入代码import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.anno...
2019-03-22 13:53:37
229
原创 springCloud学习第二天---security
昨天简单的作了一个eureka注册中心的案例,我们有没有发现一个问题,我们的注册中心谁都可以注册,因为我们没有加入安全认证,下面我们引入<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security...
2019-03-22 10:32:09
177
原创 springCloud学习第一天--Eureka
1.搭建EurekaServerspringboot版本2.1.3.RELEASEspringcloud版本Greenwich.SR1(1)创建一个springboot项目 注意:勾选EurekaServer支持(2)application.yml配置文件server: port: 7776eureka: client: servi...
2019-03-19 15:28:17
138
转载 详说HashMap
Map 综述(一):彻头彻尾理解 HashMap 摘要: HashMap是Map族中最为常用的一种,也是 Java Collection Framework 的重要成员。本文首先给出了 HashMap 的实质并概述了其与 Map、HashSet 的关系,紧接着给出了 HashMap 在 JDK 中的定义,并结合源码分析了其四种构造方式。最后,通过对 HashMap 的数据结构、实现原...
2018-10-30 13:17:46
142
原创 百度的web Uploader使用心得
我们做的这个项目,表单比较多,附件也比较多,一个表单可能有好几个附件字段,包括单附件,多附件。项目用的前端框架bootstrap,最开始的时候我是用了bootstrap的fileupload插件(这个插件也是很强大),不过我们的项目需求比较特殊,提交完表单后有一个信息确认页面,在这个确认页面上有修改按钮,可以跳回那个表单进行修改,这样问题就出来了,浏览器是不允许给file类型的input赋值的...
2018-09-20 09:17:44
738
原创 自定义token注解,防止表单重复提交
配置过滤器 spring-mvc.mxl <mvc:interceptors> <!--判断是否是登录转台--> <bean class="com.xjkcsj.core.aspect.LoginInterceptor"/> <!--防止表单重复提交--> <mvc:in...
2018-08-30 21:44:38
806
1
转载 springMVC注入是线程安全的吗
springmvc的注入线程安全吗 servlet是单例的,而tomcat则是在多个线程中调用servlet的处理方法。因此如果servlet存在实例对象,那么就会引出线程安全的问题。而springmvc允许在controller类中通过@Autowired配置request、response以及requestcontext等实例对象。这种配置方法是否线程安全?答案是——这种...
2018-07-23 17:50:55
2664
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人