微服务时代的实体设计

在一个微服务时代,一个实体参数或者返回值,它可能是多服务之前共享的,而这个重复的实体你需要拷贝多份,这是违背DRP原则的,所以我们需要找一种更友好的方式来代替它,它就是Map,我们把实体的属性都映射成Map这种k、v的形式即可解耦!

B服务不需要处理A服务的实体

如果只是接受实体,然后把它传递给C服务,这时,你直接把它设计成Map即可

public class ADto:HashMap<String,Object>{}

B服务需要加工,过滤A服务的实体

如果B服务拿到A服务的实体后,需要对某些字段进行处理,那我们需要把这些字段抽象出来,把它的get方法公开,在程序的其它地方使用,而不需要把所有字段都复制过来,这也是解耦的一种体现!

/**
* A计算模板.
*/
public class ATemplate extends HashMap<String, Object> { public Boolean getAllowBuildAccount() {
return Boolean.valueOf(this.get("allowBuildAccount").toString());
} public Boolean getAllowMakeAccount() {
return Boolean.valueOf(this.get("allowMakeAccount").toString());
}
}

在程序里,你可以使用这两个公司的方法

 List<ValidateResult> validateResultsList =
accountsValidate(currentClientAccount, false, o -> o.getAllowMakeAccount()); //使用predicate里过滤它的字段

思路模型

graph TD
b(a服务)-->a(HashMap)
a-->c(b服务)
a1(HashMap)-->Entity1
a1-->Entity2

个人认为:这种设计非常巧妙,当然会有一些装箱和拆箱的操作,但与程序扩展性相比,简直可以忽略!

java~接口的共享实体使用Map后更灵活的更多相关文章

  1. Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制

    新的锁定类提高了同步性 —— 但还不能现在就抛弃 synchronized JDK 5.0为开发人员开发高性能的并发应用程序提供了一些很有效的新选择.例如,java.util.concurrent.l ...

  2. Java 中的集合接口——List、Set、Map

    Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...

  3. 自顶向下理解Java集合框架(三)Map接口

    Map基本概念 数据结构中Map是一种重要的形式.Map接口定义的是查询表,或称查找表,其用于储存所谓的键/值对(key-value pair),其中key是映射表的索引. JDK结构中还存在实现Ma ...

  4. JAVA 常用集合接口List、Set、Map总结

    java中频繁使用List.Set.Map接口,将其总结如下 它们的继承与实现关系如下: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└ ...

  5. Java集合(十)实现Map接口的HashMap

    Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是“链表散列”,也就是数组+链表 ...

  6. java中List、Set和Map三个接口及其主要实现类

    三个接口都在java.util包下 List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个共同的父接口,叫Collection,Map没有继承Collection接口 1.List接口: ...

  7. Java中的集合(十三) 实现Map接口的Hashtable

    Java中的集合(十三) 实现Map接口的Hashtable 一.Hashtable简介 和HashMap一样,Hashtable采用“拉链法”实现一个哈希表,它存储的内容是键值对(key-value ...

  8. Java中的集合(十一) 实现Map接口的TreeMap

    Java中的集合(十一) 实现Map接口的TreeMap 一.TreeMap简介(基于JDK1.8) TreeMap是基于红黑树数据结构,是一个key-value的有序集合,该映射根据其键的自然顺序进 ...

  9. Java 反射实现实体转Map时,父类元素丢失

    public class BeanToMap { public static Map<String, Object> ConvertObjToMap(Object obj) { Map&l ...

随机推荐

  1. 把List<string>集合,编程string,并以“,”号分割

    List<int> roleIdList = GetRoleIdList(user.ID); string roleIdsStr = ""; if (roleIdLis ...

  2. syncer.go

    package ) ) ) ].Key,)) )) }

  3. 【强连通分量】Bzoj1051 HAOI2006 受欢迎的牛

    Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...

  4. 深入css布局篇(1) — 盒模型 & 元素分类

    深入css布局(1)-- 盒模型 & 元素分类     " 在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深 ...

  5. APP测试要点—UI、功能测试

    一.UI测试 测试用户界面(如菜单.对话框.窗口和其它可规控件)布局.风格是否满足客户要求.文字是否正确.页面是否美观.文字.图片组合是否完美.操作是否友好等. UI测试的目标是确保用户界面会通过测试 ...

  6. go语言调度器源代码情景分析之六:go汇编语言

    go语言runtime(包括调度器)源代码中有部分代码是用汇编语言编写的,不过这些汇编代码并非针对特定体系结构的汇编代码,而是go语言引入的一种伪汇编,它同样也需要经过汇编器转换成机器指令才能被CPU ...

  7. 图解Java线程的生命周期,看完再也不怕面试官问了

    文章首发自个人微信公众号: 小哈学Java https://www.exception.site/java-concurrency/java-concurrency-thread-life-cycle ...

  8. 用node探究http缓存

    用node搞web服务和直接用tomcat.Apache做服务器不太一样, 很多工作都需要自己做.缓存策略也要自己选择,虽然有像koa-static,express.static这些东西可以用来管理静 ...

  9. Restframe_work 回顾记忆集

    目录 Restframe_work 回顾记忆集 rest_framework主要功能介绍 rest_framework主要模块介绍 记忆集 错题集 混淆集 重点集 难点集 Restframe_work ...

  10. 《ASP.NET MVC 5 高级编程》学习笔记

    前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...