首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从零开始学架构-day02

回顾 在上一节篇中主要是学习了架构和框架的的区别,包含系统和子系统的概念,以及在不同的维度去区分一个系统的架构个什么样子。...今天我们开看一下架构这个概念为什么出现,为什么我们每开发一个系统都要进行架构设计。 1. 架构的发展历史 一切事物都有自己产生的原因,那么架构的出现是为什么呢?...算了回到主题 2.1 架构设计的误区 为了达到某一个指标而放弃根本目标,降低复杂度(架构设计的主要目的是为了解决软件系统复杂度带来的问题。 )。...但是现在在开发中最常见的状态“倒排期”,这真的,哎!!!用代码整洁之道中BOB大叔说说这真的不是一个专业人员应该做的事情。...2.2 案例分析 设计学生管理系统,学生管理系统的模块,登陆,成绩管理,录入等 从逻辑进行架构设计: 从物理属性进行架构设计: 4.从MVC-规范的Spring MVC框架设计角度来看或者

24220

开源组件 | ☁️CloudAAC,一个基于JetPack-AAC的Android通用化框架

什么样的框架适合你?什么样的框架也许都不适合你。 与大千你我一样,皆是从 无架构到MVC->模块化->MVP-> MVVM->AAC->组件化AAC。...可能有人喜欢 BaseVMFragnment,但有些时候,我们真的需要ViewModel吗,我们真的只有一个ViewModel吗,我可能真的不想去写,对于2020的今天,带着这些问题,我开始思考,什么样的架构才是我们最合适的...,我想不出来,于是将选择主动权交给大家,并将过程中的一些想法通过代码汇聚于此,便于为大家提供思路,这就是CloudAAC,化繁为简,一个简易的组合式框架。...jitpack.io' } } } implementation 'com.github.Petterpx.CloudAAC:core:v1.0.3' CloudAAC已经导入了以下组件: //一个非常优秀的状态栏处理工具...注意: binding 变量 请谨慎使用,非必要场景下,务必禁止使用,避免造成视图不一致的问题

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

浅谈JPA优缺点_sql优点

Removed:删除的对象,有id值,尚且和Persistence Context有关联,但是已经准备好从数据库中删除 Managed状态下的数据保存,更新以及删除数据下的Removed状态,数据都不会立即更新到数据库...Datached的状态,可以调用em.merge()方法,这个方法会根据实体类的id来更新数据库数据,这时实体类变成了Managed(托管)状态。 三.为什么要使用JPA?...在数据库对象更新的时候,采用JDBC编程,必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程一个很费时费力的过程。...系统架构问题 JDBC属于数据访问层,但是使用JDBC编程时,必须知道后台用什么数据库、有哪些表、各个表有有哪些字段、各个字段的类型是什么、表与表之间什么关系、创建了什么索引等等与后台数据库相关的详细信息...JPA 一个规范而不是一个产品。需要提供商提供一个实施,才能获得这些基于标准的 API 的优势。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1.6K20

Hibernate 脏数据检查

这里就存在一个问题,Hibernate如何来判断一个实体对象的状态前后是否发生了变化。也就是说Hibernate如何检查出一个数据已经变脏了。...在继续讲解之前,我要先来介绍一个内部数据结构EntityEntry,EntityEntry从属于SessionImpl(Session接口的实现类)的内部类,每一个EntityEntry保存了最近一次与数据库同步的实体原始状态信息...实例相关联的实体对象和原始状态信息,其中key实体对象,valueEntityEntry。...但是有时候由于级联操作的存在,会产生一个问题,比如当保存一个user对象时,会根据user对象的状态来对他所关联的address对象进行保存,但是此时并没有根据级联对象的显示保存语句。...如果想使用unsaved-value必须如下配置address对象的id属性:

1.4K60

浅谈RESTful

add 增加一个必须依赖于某个实体实体 PUT Y Update set replace 取代一个关系,已存在时先删除后建立,不存在时直接建立。...POST /users Data: { "name": "张无忌" } Add:增加一个必须依赖于某个实体实体 数据结构:1对多的关系 范例:Add a public key on behalf...of a user 增加一个代表使用者的公钥 增加这个公钥之前,使用者必须存在,公钥必须归属于某个使用者之下公钥跟姓名一样,使用相同计算机的公钥就会相同,但不表示一个使用者,故公钥也会有自己的 ID...DELETE /users/{account} HTTP Status Code HTTP状态码(HTTP Status Code)用以表示网页服务器HTTP响应状态的3位数字代码。...所有状态码的第一个数字代表了响应的五种状态之一。 除非另有说明,状态HTTP / 1.1标准(RFC 7231)的一部分。

15610

BaaS API 设计规范

状态状态码分为两类,一个 Http 状态码;一个 Result 数据结构中的 StatusCode 状态码。HTTP 状态码表示该 HTTP 请求的处理状态。...一个请求是否成功由 HTTP 状态码标明的. 一个 2XX 的状态码表示成功, 而一个 4XX 表示请求失败. 一般情况下,如果能使用 HTTP 状态码表示的状态,应该优先使用 HTTP 状态码。...其中,201、404这两个状态码,需要API开发者在每一个API中,根据业务逻辑的执行结果来主动返回的。其它的状态码由框架统一进行返回。 2....对于每一个实体对象:可以为每一个实体对象添加 persistenceStatus 属性,值为 Deleted、Modified、New 来表示该实体状态:删除、更新、添加。...如果不提供该属性,那么如果实体Id 属性,则表示更新,否则表示添加。

3.1K111

实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以

Users,如果实体类不支持枚举类型,得这样使用(下面的示例都以PDF.NET的ORM框架使用来说明): //获取一个实体类: Users user=new Users(); user.ID=1; if...、修改数据,没有问题的: //更新实体类: Users user=new Users(); user.ID=1; user.RoleID=RoleNames.Admin; EntityQuery.Instance.Update(user); 但是查询实体类的时候会有点小问题,虽然能够正确的从数据库查询,但查看枚举属性的时候会报类型转换错误: //获取一个实体类: Users user=new...,那么在SqlReader读取的时候,必须进行类型转换: user.RoleID=(RoleNames)reader["RoleID"];     幸好PDF.NET的实体类认为“实体数据的容器”,...--------------分界线---------------------- PDF.NET 开发框架国产的开发框架,支持SQL-MAP、ORM和数据控件 三种编程模型,可以一种或者三种混合使用,开源的开发框架

1.6K100

DDD Command模型

在这个模型中,一个Command Handler负责处理某种类型的命令,并根据其中包含的信息采取行动。 聚合         聚合始终保持一致状态实体实体组。...为了保持整个聚合状态一致,向联系人添加地址应通过联系人实体完成。在这种情况下,联系人实体指定的聚合根。在Axon中,聚合由一个聚合标识来标识。...聚集一个常规的对象,它包含改变状态状态和方法,虽然根据CQRS原则不完全正确。也可以通过读取方法获取聚合的状态。       聚合根必须声明包含聚合标识符的字段。...注意,一个关于聚合不应该暴露状态的常见误解:聚合中的任何实体都不应该含有属性访问方法,不是的。实际上,如果聚合中的实体向同一聚合中的其他实体暴露状态,则聚合可能会受益匪浅。...由于需要将命令路由到正确的实例,因此必须正确标识这些实例。他们的“id”字段必须用@EntityId注释。      命令中有一个属性用于查找应该路由哪个实体,它的值默认为注释字段的名称。

2.4K30

再谈游戏服务器架构

那么服务器程序在运行时就需要一些实体来保存玩家的数据,这些实体可以是一个类,也可以是一个线程,设计思想不同采用的实体差别也会很大。...这里涉及服务器端设计的一个核心问题:运行时玩家数据的保存、修改及数据流向。...做为核心功能,Skynet 仅解决一个问题: 把一个符合规范的 C 模块,从动态库(so 文件)中启动起来,绑定一个永不重复(即使模块退出)的数字 id 做为其 handle 。...每个模块可以向 Skynet 框架注册一个 callback 函数,用来接收发给它的消息。每个服务都是被一个个消息包驱动,当没有包到来的时候,它们就会处于挂起状态,对 CPU 资源零消耗。...每个 agent 自己所属进程 attach 其它 id ,可以获取其他对象的状态

4.4K131

详解整洁架构在前端的应用实践|技术创作特训营第一期

主要特点如下: ● 与框架无关: 无论前端代码还是服务端代码,其逻辑本身都应该是独立的,不应该依赖于某一个第三方框架或工具库。比如不依赖Vue.js、React等框架。...但它们必须高度抽象的,封装了该应用中最通用、最高层的业务逻辑,只可以随着核心业务规则变化,不可以随着外层组件的变化而变化。...例如,一个针对页面导航方式或者安全问题的修改不应该触及这些对象,一个针对应用在运行时的行为所做的变更也不应该影响业务实体。该层一般采用DDD的理念进行抽象、封装。...第二步,就是要根据分析过程中产生的动作和状态,提取出产生这些行为的对象,进一步识别出实体、值对象、聚合根。 ● 实体 业务形态上包含业务规则的集合,具有唯一标识字段(id)。...● 聚合根 聚合根一个特殊实体,具备唯一标识(id),有独立的生命周期。聚合根聚合的唯一入口点,负责协调实体以及值对象完成业务逻辑。

56161

Spring Security项目Spring MVC开发RESTful API(二)

@Pattern(regex=) 字符串必须匹配正则表达式 @Size(min=,max=) 集合的元素数量必须在min和max之间 @Email 字符串必须Email地址 @Length(min=...,max=) 检查字符串长度 @NotBlank 字符串必须有字符 @NotEmpty 字符串不为null,集合有元素 @Range(min=,max=) 数字必须大于等于min,小于等于max @SafeHtml...字符串安全的html @URL 字符串合法的URL @AssertFalse 值必须false @AssertTrue 值必须true @DecimalMax(value=,inclusive...inclusive=false) value指定的值 @Digits(integer=,fraction=) integer指定整数部分最大长度,fraction小数部分最大长度 @Future 被注释的元素必须一个将来的日期...@Past 被注释的元素必须一个过去的日期 @Max(value=) 值必须小于等于value值 @Min(value=) 值必须大于等于value值 自定义注解修改请求 实体对象 @NoArgsConstructor

78220

如何来实现SpringBoot应用的JPA数据持久化和热插拔

而JAP规范就是为了解决这个问题:规范ORM框架,使用ORM框架统- -的接口 和用法。这样在采用面向接口编程的技术中,即便更换了不同的ORM框架,也无须变更业务逻辑。...但自EJB 3.0开始,实体bean被单独分离出来,形成了新的规范: JPA。所以,JPA完全可以脱离EJB 3来使用。实体JPA中的核心概念。 实体的持久状态通过持久化字段或持久化属性来表示。...这些字段或属性使用对象/关系映射注解将实体实体关系映射到基础数据存储中的关系数据。 与实体在概念上比较接近的另外一个领域对象是值对象。实体可以被跟踪的,通常会有一个主键(唯一标识)来追踪其状态。...对于普通开发者而言,自己实现应用程序的数据访问层一件极 其繁琐的过程。开发者必须编写太多的样板代码来执行简单查询、分页和审计。...(1)保存给定实体。 (2)返回由给定ID标识的实体。 (3)返回所有实体。 (4)返回实体的数量。 (5)删除给定的实体。 (6)指示是否存在具有给定ID实体

4.4K30

20. 精读《Nestjs》

精读 《Nestjs 文档》 本期精读的文章:Nestjs 文档 体验一下 nodejs mvc 框架的优雅设计。...3.1 Typeorm 有了如此强大的后端框架必须搭配上同等强大的 orm 才能发挥最大功力,Typeorm 就是最好的选择之一。...至于类型,Typeorm 通过反射,拿到了类型定义,自动识别 id数字类型、name 为字符串类型,当然也可以手动设置 type 参数。...content: string; 这里遇到一个问题:新增实体时,需要校验所有字段,但更新实体时,由于性能需要,我们一般不会一次查询所有字段,就需要指定更新时,不校验没有赋值的字段,我们通过 Typeorm...有一个问题,就是 nodejs 服务运行时,要等待数据库服务启动完毕,也就是有一个启动等待的需求。

3.9K20

整洁架构在前端的设计思想与应用实践

主要特点如下: 与框架无关: 无论前端代码还是服务端代码,其逻辑本身都应该是独立的,不应该依赖于某一个第三方框架或工具库。比如不依赖 Vue.js、React 等框架。...但它们必须高度抽象的,封装了该应用中最通用、最高层的业务逻辑,只可以随着核心业务规则变化,不可以随着外层组件的变化而变化。...例如,一个针对页面导航方式或者安全问题的修改不应该触及这些对象,一个针对应用在运行时的行为所做的变更也不应该影响业务实体。该层一般采用 DDD 的理念进行抽象、封装。...第二步,就是要根据分析过程中产生的动作和状态,提取出产生这些行为的对象,进一步识别出实体、值对象、聚合根。 实体 业务形态上包含业务规则的集合,具有唯一标识字段(id)。...聚合根 聚合根一个特殊实体,具备唯一标识(id),有独立的生命周期。聚合根聚合的唯一入口点,负责协调实体以及值对象完成业务逻辑。

70031

我,前端,不想卷技术了……卷下整洁架构

主要特点如下: ▶︎ 与框架无关:无论前端代码还是服务端代码,其逻辑本身都应该是独立的,不应该依赖于某一个第三方框架或工具库。比如不依赖 Vue.js、React 等框架。...但它们必须高度抽象的,封装了该应用中最通用、最高层的业务逻辑,只可以随着核心业务规则变化,不可以随着外层组件的变化而变化。...例如,一个针对页面导航方式或者安全问题的修改不应该触及这些对象,一个针对应用在运行时的行为所做的变更也不应该影响业务实体。该层一般采用 DDD 的理念进行抽象、封装。...第二步,就是要根据分析过程中产生的动作和状态,提取出产生这些行为的对象,进一步识别出实体、值对象、聚合根。 实体 业务形态上包含业务规则的集合,具有唯一标识字段(id)。...聚合根 聚合根一个特殊实体,具备唯一标识(id),有独立的生命周期。聚合根聚合的唯一入口点,负责协调实体以及值对象完成业务逻辑。

576110

在C++中反射调用.NET(二) 定义数据接口 绑定委托方法 使用SOD DTO 对象 将.NET对象转换到C++结构体为何不使用序列化的问题

GetUserByID 中,有一行代码: IUserInfo userinfo= EntityBuilder.CreateEntity(); EntityBuilder对象是PDF.NET SOD框架中的一个实体构造器...,调用CreateEntity方法可以根据一个接口创建一个动态实体类对象,通过这种方式,我们可以不用去关心实体类的构造细节,仅仅关心方法调用的数据接口。...所以这里涉及到2个问题: 1,从Object对象取出数据; 2,将数据转换并且赋值给C++本地数据结构 对于第一个问题,我们可以反射DTO对象的属性,然后跟本地数据接口一一对应,但是,本来我们已经在反射调用方法了...幸好,我们的DTO接口对象它是一个动态创建的SOD实体类对象,由于SOD实体类有类似“字典”的功能,可以通过相关方法进行访问。...实体类基类的一个方法定义: public object PropertyList(string propertyFieldName) 我们反射此方法并且绑定一个委托对象来调用它: static

2.9K70

mybatis-plus思维导图,让mybatis-plus不再难懂

mybatis-plus与mybatis #####mybatis  Mybatis 一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。...[回顾mybatis的特点.png] 但mybatis有个让我比较头疼的一个问题sql工作量很大,尤其字段多的时候。...#####mybatis-plus 而mybatis-plus这样一个框架,一种集mybatis与hibernate的优点一起的框架。...常用实体注解 MP通过ORM模式封装了常用的CRUD操作,自然少不了实体注解,先来看看都有哪些注解 [MP常用实体注解.png] 其中实体无注解化设置可以如下处理: 当数据库的表字段名驼峰命名时无需注解处理...自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: 2 #字段策略 0:"忽略判断",1:"非 NULL 判断

3.8K180

架构师技能1:Java工程规范、浅析领域模型VO、DTO、DO、PO、优秀命名

通常这种接口可以轻易更换接口类型,所以业务逻辑必须要轻,甚至不做具体逻辑。该层的领域模型不允许传入DAO层。...service :组合服务,也叫事务服务 model:除包含get set方法,还包含原子服务(如获得关联model的id) dao:数据持久化 贫血模型比较常见,其问题在于原子服务往往不能直接拿到关联...《重构-改善既有代码的设计》提到的坏代码味道之一就是纯数据类的问题,要求数据和行为在一起,而贫血模型恰恰就是纯数据类的问题呢。 4、充血模型 面向对象设计的本质:“一个对象是拥有状态和行为的”。...不要名不副实:比如一个 getXXX 的函数,结果里面还做了 add, update 的操作。对问题排查造成很大的困扰。因此命名一定要用实质内容相符。不论类名,变量名,方法名都要有实际的意。...尽量避免名字中出现数字编号 尽量避免名字中出现数字编号,如value1,value2等,除非逻辑上的确需要编号。 5)少使用类型前缀 最好从名字上就能揣测出其类型。加后缀说明可以的。

2.4K12

记一次业余项目的敏捷开发实践

本次在原有ApiTemplate项目之上,增加一个用户登录权限控制模块,用于验证ApiTemplate项目在面对一些简单问题时,如何抽象并支持未来的扩展。...所以 查询用户注册信息、在线用户存储相关接口只做定义和模拟实现,不做具体的存储实现 考虑到业务逻辑稳定的,而存储可变的,所以数据库实体对象与业务实体对象分离 给任务一个期限 像本次就只列出了任务的期限...,而没有列出每个子阶段的期限,如:一个需求必须要经过需求分析、模块设计、代码实现等阶段。...然后进入第三步 定义在线用户模块的接口 此步包含:在线用户管理实体接口、在线用户实体接口。定义好后先不实现。...三、需求分析 用户名:支持英文、数字、汉字、以及特殊字符;用户名不区分大小写 密码:支持英文、数字、特殊字符,区分大小写 提示:用户不存在与密码错误要区分提示 此阶段不考虑数据持久化,因为要快速验证原型的可行性

80110
领券