对程序来说,null就是指针没有任何指向,而结合业务逻辑情况就复杂得多,需考虑: DTO中字段的null到底意味着什么?是客户端没传给这个字段? 既然空指针很讨厌,那么DTO中的字段要设默认值吗?...NPE原因 DTO字段null的含义 JSON到DTO的反序列化过程,null的描述有歧义: 客户端不传某个属性或传null,该属性在DTO中都是null。...然后,由于DTO中已经巧妙使用了Optional来区分客户端不传值和传null值,那么业务逻辑实现上就可以按照客户端的意图来分别实现逻辑。...对于年龄,我们认为如果客户端希望更新年龄就必须传一个有效的年龄,年龄不存在重置操作,可以使用Optional的orElseThrow方法在值为空的时候抛出IllegalArgumentException...为测试使用Optional是否可以有效区分JSON中没传属性还是传了null,在JSON中设个null的age,结果是正确得到了年龄不能为空的错误提示: curl -H "Content-Type:application
标识符不能是Python中的关键字和保留字 也不建议使用Python中的函数名作为标识符,因为这样会导致函数被覆盖 命名规范: 在Python中注意遵循两种命名规范: 1)....(str) 字符串用来表示一段文本信息,字符串是程序中使用的最多的数据类型 在Python中字符串需要使用引号引起来 引号可以是双引号,也可以是单引号,但是注意不要混着用 s = 'hello'...可以使用三重引号来表示一个长字符串 ''' ''' 三重引号可以换行,并且会保留字符串中的格式, 举例: s = '''锄禾日当午, 汗滴禾下土, 谁知盘中餐, 粒粒皆辛苦''' print(s)运行结果...: 转义字符 可以使用 \ 作为转义字符,通过转义字符,可以在字符串中使用一些特殊的内容 例子: \' 表示' \" 表示" \t 表示制表符 \n 表示换行符 \\ 表示反斜杠 \uxxxx 表示Unicode...id 在Python中可以对两个字符串进行大于(等于)或小于(等于)的运算, 当对字符串进行比较时,实际上比较的是字符串的Unicode编码 比较两个字符串的Unicode编码时,是逐位比较的 利用该特性可以对字符串按照字母顺序进行排序
字符串在内存中的地址 就是 变量的id除了字符串 还有什么变量类型?...存储位置 i_age 在内存中的地址 在 id(i_age)添加图片注释,不超过 140 字(可选)第一句的赋值过程 在内存中分配一块空间 存储 整数 分配空间的位置 在 id(i_age)然后把分配空间地址给...匹配、显示之类的目的两种类型之间 可以相互转化吗?...具体存的 是 整型数字类的 对象这个 int型的对象 在电脑内存 里面长什么样子 呢?...二进制 在打印输出的时候 使用十进制 这符合 我们的生活习惯因为 我们有 十 个手指头但是计算机用的是 二进制 binary添加图片注释,不超过 140 字(可选)在电脑存储和运算的时候 使用二进制
我们应该分解子程序并给他们取一个可描述性的名称。这样的话,我们的代码就会变得像一个故事。而且,我们应该从主要逻辑中辨别出细节。 Kotlin 可以帮我们做到这点吗?不行,因为这些规则是无关于语言的。...表达式 流程控制结构作为表达式 在 Kotlin 中,流程控制结构体是表达式而不是语句。我们刚才已经看到 when 表达式实践了。...如果你的变量必须是可以修改的,你可以使用 var 。但是请你在使用 var 之前三思。 val id = 1 id = 2 // 编译错误!...在 Kotlin 中,我们可以这样使用数据类: data class DesignData( val id: Int, val fileName: String,...任何时候可读性和简单性原则比起使用 Kotlin 那些有趣的特性来说更加重要。 总结 我们可以使用 Kotlin 写出更加简洁的代码吗?是的,毫无疑问!
(3)长整型 末尾加上字母“L”或“l”,但建议写成大写 需要注意的是,在现在,Python的标准整型和长整型其实区分已经不明确了,已经不需要考虑是使用标准整型和长整型了,因为一旦有数据溢出的情况...,Python将会自动为我们转换为长整型,即整型和长整型会慢慢统一。...(关于长浮点数的表示方法以及在计算机中的处理,可以参考计算机组成原理的相关书籍) 下面是一些合法的表示方法: >>> 0.0 0.0 >>> -777. -777.0 >>> 96e3 * 1.0 96000.0...需要注意的是,在Python2.2以前,这些转换函数只是作为Python的内建函数使用,但在之后,由于Python的类和类型进行了统一,所以这些内建函数实为工厂函数(在《Python回顾与整理2:Python...,默认base为10: >>> int('123') 123 >>> int('123', 8) 83 >>> int('123', 16) 291 当然也可以指定为0,说明把原来的字符串数作为一个整型
目前,我们有几个示例用例,如下所示: MapStruct Jakarta JSONB Spring 值对象或不可变类型 在领域驱动设计(DDD)中,值对象用于表示来自问题领域或上下文的概念。...关键在于,当你需要创建一个值对象或不可变类型时,可以使用 Record。 不可变实体 等等,你是说不可变实体吗?这可能吗?这可能不太常见,但确实是可以的,比如当一个实体持有历史转变点数据。...} 为了方便创建对象,或者当你需要创建更复杂的对象时,可以使用方法工厂或构建器。...我们已经介绍了许多种模式,接下来,我们将进入另一种代码设计模式。 状态的实现 在某些情况下,我们需要在代码中实现流或状态。状态设计模式在电子商务中有一个应用场景,即对于订单,我们需要维护其时序流。...Record 不只是 DTO 那么简单。在本文中,我们探讨了一些用例,如值对象、不可变实体和状态的实现。 我们可以在并发场景、CQRS、事件驱动架构中利用不可变类。
前面我们基础设施基本搭建完毕,后面可以做一些稍微复杂点的功能了,接下来就来实现一个设置管理。 设置管理一般用做一些系统设置之类的,如邮箱配置等,面向使用人员。...而不需要修改我们的配置文件,修改配置文件的方式就偏向于技术人员了。 话不多说,开造。 设计结构 设置管理中需要2个表,一个是设置组表,比如什么邮箱设置是一个分组,公众号设置是一个分组。.../// Int, /// /// 长整型 /// ...只需一行代码将SettingProvider加入到WheelServiceBase和WheelControllerBase中,后续就可以很方便的获取设置,不需要频繁在构造器注入: public ISettingProvider...SettingProvider => LazyGetService(); 测试 启动程序,测试一下获取设置值,这里可以看到,我们通过SettingProvider成功读取了设置
反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET程序集的简单方法,今天我们看看如何在C++...所以这里涉及到2个问题: 1,从Object对象取出数据; 2,将数据转换并且赋值给C++本地数据结构 对于第一个问题,我们可以反射DTO对象的属性,然后跟本地数据接口一一对应,但是,本来我们已经在反射调用方法了...("ID"); 将.NET对象转换到C++结构体 在示例中,我们定义了一个CppUserInfo结构体: struct CppUserInfo { int ID; //wstring....NET与C++的相互转换,基本上就能够使用.NET的DTO对象了,因为其它数字类型只要类型兼容,是可以直接使用的,比如int类型。...为何不使用序列化的问题 在进行分布式跨平台调用的时候,序列化常常作为一个有效手段被大量使用,但是我们的应用有几个特点: 1,没有分布式,在进程内进行不同语言平台调用; 2,不知道反序列化的类型,因为C+
使用上表中的关键字可以与删除匹配行的派生查询结合使用delete…By或remove…By创建派生查询。...实体的 ID 必须使用 Spring Data 的@Id注解进行注解。 当您的数据库具有用于 ID 列的自动增量列时,生成的值在将其插入数据库后设置在实体中。...以下示例(我们在本章前面也使用过)是一个封闭投影: 例 67....动态投影 到目前为止,我们已经使用投影类型作为集合的返回类型或元素类型。但是,您可能希望选择在调用时使用的类型(这使其成为动态的)。要应用动态投影,请使用如下例所示的查询方法: 示例 74....直接使用 DTO 类型,您的查询方法可以从不限于域模型的更动态的投影中受益。
前言 本次分析基于 CPython 解释器,python3.x版本 在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数。...在python3后,统一使用了长整型。这也是吸引科研人员的一部分了,适合大数据运算,不会溢出,也不会有其他语言那样还分短整型,整型,长整型...因此python就降低其他行业的学习门槛了。...不溢出的整型的可行性 尽管在 C 语言中,整型所表示的大小是有范围的,但是 python 代码是保存到文本文件中的,也就是说,python代码中并不是一下子就转化成 C 语言的整型的,我们需要重新定义一种数据结构来表示和存储我们新的...在长整型的 ob_digit 中元素理论上可以保存的int类型有 32 位,但是我们只保存 15位,这样元素之间的乘积就可以只用 int 类型保存即可, 对乘积结果做位移操作就能得到尾部和进位 carry...有了这种存放方式,在内存空间允许的情况下,我们就可以存放任意大小的数字了。 ? 长整型的运算 加法与乘法运算都可以使用我们小学的竖式计算方法,例如对于加法运算: ?
把那段长长的代码中几个关键的部分分开来执行,看哪一段会报错,这样就可以更加精准的定位问题,从而可以快速的解决问题。...我们把这段代码可以拆成以下几部分: df[df["city_id"] == 1] 运行上面的代码,会把df表中city_id等于1的全部数据取出来。...列中的第一个值从时间类型转换为字符串类型 str(df[df["city_id"] == 1]["Stime"][0])[11:13] 再运行上面的这段代码,会把字符串第11:13位置的字符获取出来...int(str(df[df["city_id"] == 1]["Stime"][0])[11:13]) 再运行上面的代码,会把取出来的字符串转化为整型。...掌握了分段执行,让你能够看到一长段代码报错以外不再慌张,也不需要再去求助别人,自己也可以游刃有余的解决问题。 你还可以看: Python中的这几种报错你遇到过吗?
64位系统:整数的位数就是64位,寻址范围为:-263 ~ 263-1 ,即-9223372036854775808 ~ 9223372036854775807 长整形(long) 在Python中,...浮点型(float) 上面两种数据类型都是整数,但在实际并不可能全是整数,还有小数啊,于是浮点型便应运而生,说白了浮点型就是小数,并且可以使用科学计数,在计算机中,科学计数的倍数10用e代替,如:5.21x105...列表(list) 对于列表,萌新可能会很陌生,你可以暂时把它理解为一维数组,列表的在Python中的使用次数也是相当多的,是除字符串以外必须掌握的一种数据类型。...] 可以看到,被一对方括号括起来的数据就是列表,刘表里面可以又其他数据类型,上面的列表包括:字符串和整型。...:字符串、整型。
其二,我认为在团队协作编码中,一个好的命名方式是可以节约很多时间成本的。...Service 或 Manager 向外传输的对象。...•VO,这个最好理解,前端最后需要的数据长什么样,对应的对象就是 VO。 如何使用这些 O? 说了这么多,在实际的项目中,我们应该如何去使用这些 O? 教条主义?...首先,这几个概念很完整,但是我们在用的时候是必须按这个来做吗?答案当然不是的,规矩是死的,人是活的。...2.DTO 和 BO 在一般情况下,如果业务系统不是非常复杂,可以考虑省略。3.VO 和 DTO,DTO 可以用于将数据传递给前端,如果你不需要删减字段的话,VO 可以考虑省略。
原文如下: 在Android Support Library19.1版本中,Android工具小组引入了几个很酷的注解类型,供开发者在工程中使用。...资源类型注解 是否曾经传递了错误的资源整型值给函数,还能够愉快的得到本来想要的整型值吗?资源类型注解可以帮助我们准确实现这一点。...在下面的代码中,我们的sayHello函数预期接受一个字符串类型的id,并使用@StringRes注解修饰: 1 2...而我们传递了一个样式资源id给它,这时IDE将提示警告 类似的,我们把警告的地方使用一个字符串资源id代替警告就消失了: 1 sayHello(...IceCreamFlavourManager.setFlavour时,IDE将报错如下: IDE甚至会提示我们可以使用的有效的取值 我们也可以指定整型值作为标志位,也就是说这些整型值可以使用’|’或者
1") List findByLastname(String lastname); } 为了避免在@Query注释的查询字符串中声明实际的实体名称,您可以使用该#{#entityName}...为避免在具体接口上重复自定义查询方法的定义,可以@Query在通用存储库接口的注解的查询字符串中使用实体名称表达式,如下例所示: 示例 68.在存储库查询方法中使用 SpEL 表达式 - entityName...在这些 SpEL 表达式中,实体名称不可用,但参数可用。可以通过名称或索引访问它们,如下例所示。 示例 69.在存储库查询方法中使用 SpEL 表达式 - 访问参数。...您可以在实体上使用该注释来配置结果查询的获取计划。获取的类型(Fetch或Load)可以通过使用注释type上的属性进行配置@EntityGraph。...作为一种解决方法,您可以使用命名查询ResultSetMapping或 Hibernate 特定的ResultTransformer 动态投影 到目前为止,我们已经使用投影类型作为集合的返回类型或元素类型
,不应该直接或间接的修改对象的状态 阻抗:现在有些方法中在查询的时候进行了懒删除 CQRS期望解决的问题 类似懒删除这种导致的数据不一致,难以排查的问题 使用同一个领域对象来进行数据读写可能会遇到资源竞争的情况...与目前的DDD区别 领域对象我们不再是使用一套领域对象了,领域对象主要针对的是写。读直接是DTO 比如上面提到的brand聚合就不会无限扩大了。...落地 事件溯源目前比较难落地,读写分离可以尝试。 遵循聚合根的定义,必须与对象的组合区分开,对象组合考虑用DTO或者其他 我们再来回顾下聚合根。...其次,聚合在技术上有非常高的价值,可以指导详细设计。 聚合由根实体,值对象和实体组成。 如何创建好的聚合? 边界内的内容具有一致性:在一个事务中只修改一个聚合实例。...即使一定要包含,可以考虑将其创建为值对象。 聚合之间的关联通过ID,而不是对象引用 聚合内强一致性,聚合之间最终一致性 为了查询,领域聚合根无限扩大 组合领域对象是领域吗?
3)字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。 4、中文字符处理:在能够输入中、英文的系统输入中文,看会否出现乱码或出错。...5、信息反复:在一些须要命名,且名字应该唯一的信息输入反复的名字或ID,看系统有没有处理,会否 报错,重名包含是否区分大写和小写,以及在输入内容的前后输入空格,系统是否作出正确处理。...19、空格检查:在输入信息项中,输入一个或连串空格。查看系统怎样处理。如对于要求输入整型、 符点型变量的项中,输入空格,既不是空值,又不是标准输入。...20、输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统怎样处理。 如对于要 求输入符点型数据的项中,输入全角的小数点(“。”或“.”。如4.5)。...即大于128的Ascii相应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为 password。同一时候。password尽可能的长。
Python黑帽编程2.2 数值类型 数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型、长整型、布尔、双精度浮点、十进制浮点和复数,这些类型在很多方面与传统的C类型有很大的区别...2.2.1 标准整型和长整型 标准整型等价于C中的有符号长整型(long),与系统的最大整型一致(如32位机器上的整型是32位,64位机器上的整型是64位),可以表示的整数范围在[-sys.maxint...图2 长整型是整型的超集,可以表示无限大的整数(实际上只受限于机器的虚拟内存大小)。长整型字面值的后面带有字母“L”或“l”(推荐使用大写的“L”)。...图4 下面我们看看bool类型作为只有0和1取值的特殊整型的特性。...双精度浮点型使用的是底和指数的表示方法,在小数表示上精度有限,会导致计算不准确,decimal采用十进制表示方法,看上去可以表示任意精度。 下面我们看一下十进制浮点的例子。
以下是 Nest.js 中管道的一些主要用途:数据转换:管道如 ParseIntPipe、ParseFloatPipe、ParseArrayPipe 等可以将原始输入数据转换为应用内部所需的类型,如将字符串转换为整数或浮点数...例如,使用 ValidationPipe 结合 class-validator,可以自动验证请求体或查询参数是否满足特定的 DTO(数据传输对象)定义,从而预防因数据格式错误引起的运行时异常错误处理:如果数据不符合管道的规则...,管道可以抛出异常,从而阻止请求的进一步处理,并向客户端返回适当的错误信息一致性:管道有助于在整个应用中保持一致性,避免在不同的控制器或方法中重复相同的预处理逻辑可插拔性和重用性:管道是可插拔的组件,可以很容易地在多个控制器或方法之间共享和重用内置管道...它使用 class-validator 库来检查数据是否符合定义在 DTOs 或请求模型上的验证规则ParseIntPipe:将字符串类型的参数转换为整数ParseFloatPipe:将字符串类型的参数转换为浮点数...:将传入的值转换为枚举类型中的成员DefaultValuePipe:如果传入的参数是 undefined 或 null,则使用默认值替换它ParseFilePipe:用于处理上传的文件,它可以验证文件的类型
前面我们学习了MongoDB的基本查询命令操作,作为后端开发的我们大部分场景都是在应用程序中和MongoDB进行交互,因此本篇我们来学习一下如何在ASP.NET Core中集成MongoDB。...因此,一般我们会给文档中的日期类型加上如下所示的注解,将它转换为本地时间传输: [BsonDateTimeOptions(Kind = DateTimeKind.Local)] 在实际应用中,我们会给实体类创建一些...DTO,然后在应用层进行DTO向DO的转换。...当然,我们也可以使用 约定大于配置 的方式,统一采用实体类的名字 作为默认的 集合名,示例如下: _books = mongoDatabase.GetCollection(typeof(Book...作为单一实例注入,这是因为 BookService 直接依赖于 MongoClient,而根据官方Mongo Client重用准则,我们应该使用单一实例服务在IoC容器中注入MongoClient。
领取专属 10元无门槛券
手把手带您无忧上云