Angular装饰器——Decorators

最近有空学习了一下angular的基础知识,对于angular的装饰器有了一些理解。其实装饰器并非angular特有的,它是Typescript的语言特性。首先我们看看什么是装饰器  我们先看看Typescript官方的说明:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression这种形式,expression求值后必
1天前更新 16分钟阅读

JPA实体映射——一对多关系映射(上)

依照上一节的案例,我们来拆解一对多的关系怎么使用,首先还是把业务关系图弄出来。业务案例图业务分析从图中我们知道,研究所和部门是一对多关系,今天我们来展示,一对多设计的最佳实践。我们知道在JPA的实体设计中,一对多的关系可以设计成单向关联,也可以设计成双向关联。今天我们一步一步来实践各种设计,从而总结出最佳实践。Unidirectional @OneToMany 研究所实体port jav
1天前更新 27分钟阅读

JPA实体映射——一对多关系映射(中)

紧接上一节的学习,我们还是首先把业务关系图整理出来。业务案例图上一节我们知道,采用单向关联如果不使用@JoinColumn时,在新增一个研究所实体的时候,会生成三张表,并且会执行多条插入语句,在使用@JoinColumn时,会生成两张表,同时在departments上生成一个department_id字段,而JPA在插入数据时,采用的是先插入部门表数据,然后更新外键字段,这种方式,插入的效率不是很
1天前更新 23分钟阅读

JPA实体映射——Entity Mapping

学习JPA,实体之间的映射关系是最重要的一环,为了学习和讨论这部分知识,我们将这部分知识分为若干章节进行学习,我们也会用实际的例子进行分析,并且指出存在的问题,然后给出相应的优化方案。 第一步,我们列出具体的案例我们分别使用了三个实体:Institute(研究所),Department(部门),SocialProfile(社交账号)。如上图所示,研究所和部门是一对多的关系,研究所和社交账
1天前更新 24分钟阅读

CKEditor5 Observable——装饰方法

上一节我们学习了在CK5中,如何绑定多个属性以及绑定多个Observable对象,今天我们学习如何装饰方法。 首先,我们提出一个问题,为什么会有装饰方法呢?以及什么叫做装饰?所谓装饰,就是在不改变原来方法功能的前提下,增加方法的功能,众所周知在java的IO流中,就有很多地方用到了装饰。 而在CK5中,装饰是什么意思呢?请看下面这段话:Decorating object met
8天前更新 12分钟阅读

float——浮动刨根问底

浮动介绍什么叫浮动呢?浮动是元素的一个属性。当Dom元素设置了float属性后,元素会向左或者向右浮动,直到它的外边缘碰到包含框或者另一个浮动框的边框为止。设置了浮动属性的元素会脱离文档流——不占据任何文档空间,所以普通文档流中的元素表现得像浮动元素不存在一样。下面我们用代码来对浮动的定义以及特点进行说明:首先,我新建一个基本的文档,文档的内容是一个box盒子里面分别包含left区,content
8天前更新 6分钟阅读

CKEditor5 Observable——属性绑定

前面我们知道了,在CK5中怎么样将一个对象设置成Observable以及Observable在UI中如何使用?属性绑定今天我们来看看如何进行可观测对象的属性绑定和重命名。首先,我们假定有两个Observable对象,所谓绑定就是将一个对象的可观测状态绑定到另一个可观测对象,如下所示:const button = new Button(); const command = editor.comman
15天前更新 8分钟阅读

CSS三栏布局——浮动

不使用定位,只使用浮动实现左右固定,中间宽度自适应布局实现关键:自适应部分一定要放在第一个位置,使用浮动,且宽度设置为100%,如果不设置为100%,浮动元素内容不够撑开整个宽度。左右固定部位,使用margin-left :负数,使其左右靠齐。中间自适应部分嵌套一个div,设置margin-left 和 margin-right 使其空出左右固定的宽度。代码如下:<!DOCTYPE HTML
19天前更新 11分钟阅读

CSS三栏布局——定位

这里首先让中间栏绝对定位,两边栏相对定位;这里需要注意的是,如果中间使用绝对定位,不设置宽度的话将会撑不开容器;因此,中间使用了相对定位后,同时设置margin-left和margin-right给左右两栏一定空间,然后左右两栏不管是相对定位还是绝对定位都可以,这里我们使用绝对定位:<!DOCTYPE HTML> <html lang="en-US"> <head&g
19天前更新 5分钟阅读

单一职责原则(Bob大叔)【译】

1972年,David L.Parnas发表了一篇经典论文,题目是关于将系统分解为模块时使用的标准。它出现在12月份的ACM通讯上,第15卷,第12期。文中,Parnas比较了在一个简单算法中分解和分离逻辑的两种不同策略。这篇论文读起来很吸引人,我强烈要求你去研究它。他的结论部分如下:“我们试图通过这些例子证明,根据流程图开始将系统分解为模块几乎总是不正确的。相反,我们建议从一系列困难的设计决策或
19天前发布 8分钟阅读

干净架构(Clean Architecture)故事【译】

干净架构概念已经存在了一段时间,并不断出现在一个或另一个地方,但它并没有被广泛采用。 在这篇文章中,我想以一种不太传统的方式介绍这个主题:从客户的需求开始,经过各个阶段,提出一个足够清晰的解决方案,以满足上述博客(或同名书籍)中的概念。观点为什么我们需要软件架构?它到底是什么?在敏捷世界有点出乎意料的地方可以找到广泛的定义——来自 TOGAF 的企业架构定义。系统在其环境中的基本概念或属性体现在其
20天前更新 29分钟阅读

CKEditor5事件系统(视图事件冒泡)

CK5的视图(view.document)不仅是一个Observable和emitter,而且还实现了一个BubblingEmitter,它是由BubblingEmitterMixin实现的。它提供了在虚拟dom机制上的冒泡事件。 它与普通的dom树上的冒泡机制不同。它不会在特定的元素上注册监听器,而是在指定的上下文上注册监听器。这里的上下文,要么是一个元素,要么是虚拟上下文之一,要么是
22天前发布 4分钟阅读

CKEditor5事件系统(事件优先级)

今天继续学习CK5的事件系统,上一节我们知道了怎么绑定和取消绑定事件的两种方法,知道在一个emitter上对一个同名事件可以绑定多个回调函数,自然问题来了,这些函数的执行顺序是怎么样的呢?CK5的事件监听优先级实际上,对于一个同名事件,CK5提供了事件优先级功能,如下代码所示AnyClass.on( 'eventName', ( eventInfo, ...args ) => { conso
22天前更新 13分钟阅读
数据加载中