Skip to content

Latest commit

 

History

History
74 lines (57 loc) · 4.5 KB

开发.md

File metadata and controls

74 lines (57 loc) · 4.5 KB

Java分层领域模型规约:

  • PO (Persistent Object): 持久化对象,和数据库的数据结构形成一一对应的关系,每一个属性都对应db中的一个字段。等同于entity。

  • DTO (Data Transfer Object): 数据传输对象,通常指前后端之间的传输,有两种存在形式:后端存在形式为Controller里面接收的Java对象,前端存在形式为JS里面的对象,或者说json。阿里巴巴开发手册中DTO也为 Service 或 Manager 向外传输的对象,

  • BO (Business Object): 业务对象,由Service层输出的封装业务逻辑的对象。BO就是PO的组合,一个业务一般都需要多个实体类,所以BO就是PO的组合,比如BO是网站个人行为对象,PO1为交易记录,PO2为登录记录,PO3为搜索记录等等。由于数据访问层框架可以直接进行表关联,可以跳过PO直接生成BO,所以BO也是横跨两层。

  • VO (View Object): 显示层对象,通常是 Web 向模板渲染引擎层传输的对象,存放的就是用来展示的数据。

  • DO: DO和前面其中一个概念相同,有下面两种说法

    • 阿里巴巴开发手册中定义DO为Data Object,等同于上面的PO。
    • DDD(Domain-Driven Design)领域驱动设计中DO为Domain Object,等同于上面的BO。
VO DTO 的区别:
    Web --> View : VO
    Viow --> Web : DTO

基本类型包装类使用三元表达式返回null会报错,原因:三元表达式会把包装类解析成基本数据类型再运算,返回结果之后再进行包装,如果返回的是null,那么包装时就会报错。

xml文件中比较: < : <

: > 或者用。

Collection.forEach stream.forEach 该方法的操作是对原数据集生效的,stream中forEach之前加其他方法也不会有影响。

stream效率:

  • 在少低数据量的处理场景中(size<=1000),stream 的处理效率是不如传统的 iterator 外部迭代器处理速度快的,但是实际上这些处理任务本身运行时间都低于毫秒,这点效率的差距对普通业务几乎没有影响,反而 stream 可以使得代码更加简洁;
  • 在大数据量(szie>10000)时,stream 的处理效率会高于 iterator,特别是使用了并行流,在cpu恰好将线程分配到多个核心的条件下(当然parallel stream 底层使用的是 JVM 的 ForkJoinPool,这东西分配线程本身就很玄学),可以达到一个很高的运行效率,然而实际普通业务一般不会有需要迭代高于10000次的计算;
  • Parallel Stream 受引 CPU 环境影响很大,当没分配到多个cpu核心时,加上引用 forkJoinPool 的开销,运行效率可能还不如普通的 Stream;

领域模型命名规约:

  • 数据对象:xxxDO,xxx即为数据表名。
  • 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
  • 展示对象:xxxVO,xxx一般为网页名称。
  • POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

example类:myBatis创建的封装了sql方法的实体类

PostMan提交方式:

post参数格式 Content-Type 参数示例
表单提交 application/x-www-form-urlencoded username=abc&password=123
Json提交 application/json {"username":"abc","password":"123"}
xml提交 text/xml <?xml version="1.0" encoding="utf-8"?><book>book</book>

cn.hutool 工具类 com.google.common.collect 工具类

双击shift全局搜索:查找文件名 ctrl+shift+F:在文件内容中进行搜索

redis工具类

RestTemplate类,Spring封装的进行http请求的工具类

在idea中使用http restful进行测试

idea的工具栏中点击tool,http client,test restful web service打开测试栏,也可以点击convert request to the new format在文本中进行编辑http请求,并保存在文件中

Spring创建的对象对象名一般为首字母大写的类名,但是如果当类名是两个或两个以上的大写字母开头的话,bean的名字会和类名保持一致。

redis中为了方便查看,通常有层级之分。使用:来区分层级之间的关系,目录和已经存在的key没有关系。例如

//在list1中添加一个值list2。此时list1为一个list
lpush list1 list2
//在list1目录下的list2中添加一个值value。此时list1为一个目录,list2为一个list
lpush list1:list2 value
//在list1目录下的list2目录下的list3中添加一个值value。此时list1、list2为一个目录,list3为list
lpush list1:list2:list3 value