首页
学习
活动
专区
圈层
工具
发布

代码重构实战-将值对象改为引用对象(Change Value to Reference)

遇到这样的共享关系,既能将顾客信息作为值对象看待,也能将其视为引用对象: 若将其视为值对象,则每份订单数据中都会复制顾客的数据 若将其视为引用对象,对于一个顾客,就只有一份数据结构,会有多个订单与之关联...把值对象改为引用对象会带来一个结果:对于一个客观实体,只有一个代表它的对象。这通常意味着我会需要某种形式的仓库,在仓库中可以找到所有这些实体对象。...只为每个实体创建一次对象,以后始终从仓库中获取该对象。 做法 为相关对象创建一个仓库(若还没这样的一个仓库)。 确保构造器有办法找到关联对象的正确实例。修改宿主对象的构造器,令其从仓库中获取关联对象。...public static Customer create(String name) { return new Customer(name); } } 然后把原本调用构造函数的地方改为调用工厂函数...在应用程序的启动代码中,先把需要使用的Customer对象加载妥当。这些对象可能来自数据库,也可能来自文件。简单起见,我在代码中明确生成这些对象。

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

    空对象模式(Null Object Pattern)

    本文节选自《设计模式就该这样学》 1 空对象模式的定义 空对象模式(Null Object Pattern)不属于GoF设计模式,但是它作为一种经常出现的模式足以被视为设计模式了。...其具体定义为设计一个空对象取代NULL对象实例的检查。NULL对象不是检查控制,而是反映一个不做任何动作的关系。这样的NULL对象也可以在数据不可用的时候提供默认的行为,属于行为型设计模式。...The Null object provides intelligent do nothing behavior, hiding the details from its collaborators....2 空对象模式的应用场景 空对象模式适用于以下应用场景。...(4)它通过定义isNull()对使用条件语句==null的替换,显得更加优雅,更加易懂。 6 空对象模式的缺点 每一个要返回的真实的实体都要建立一个对应的空对象模型,那样会增加类的数量。

    1.4K10

    空对象模式(Null Object Pattern)

    本文节选自《设计模式就该这样学》 1 空对象模式的定义 空对象模式(Null Object Pattern)不属于GoF设计模式,但是它作为一种经常出现的模式足以被视为设计模式了。...其具体定义为设计一个空对象取代NULL对象实例的检查。NULL对象不是检查控制,而是反映一个不做任何动作的关系。这样的NULL对象也可以在数据不可用的时候提供默认的行为,属于行为型设计模式。...The Null object provides intelligent do nothing behavior, hiding the details from its collaborators....2 空对象模式的应用场景 空对象模式适用于以下应用场景。...(4)它通过定义isNull()对使用条件语句==null的替换,显得更加优雅,更加易懂。 6 空对象模式的缺点 每一个要返回的真实的实体都要建立一个对应的空对象模型,那样会增加类的数量。

    1.5K20

    空对象模式(Null Object Pattern):告别 null 检查,用行为封装实现优雅编程

    空对象模式(Null Object Pattern)通过引入一个实现目标接口的“空对象”来替代 null,将“无操作”或“默认行为”封装于对象内部,使客户端无需进行空值判断即可统一调用。...一、引言:null 的诅咒与空对象的救赎 在软件开发实践中,null 被誉为“十亿美元的错误”(billion-dollar mistake)。...= null) { System.out.println(address.getCity()); } } } 此类代码不仅冗长、脆弱,更违背了“迪米特法则...空对象模式(Null Object Pattern)正是对此问题的优雅回应:用一个行为中立的对象替代 null,让客户端“告诉”对象执行操作,而非“询问”其是否为空。...null 表示“资源不存在”(如 findById 返回 null) 空对象可能掩盖逻辑错误 简单场景下的过度设计 6.3 最佳实践 空对象设计为单例(推荐枚举) 提供 isNull() 方法便于必要时区分

    37120

    二十六、空对象模式 ( Null Object Pattern )

    在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查 Null 对象不是检查空值,而是反应一个不做任何动作的关系,这样的 Null 对象也可以在数据不可用的时候提供默认的行为...在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方 实现 我们将创建一个定义操作(在这里,是客户的名称...AbstractCustomer 抽象类,和扩展了 AbstractCustomer 类的实体类 工厂类 CustomerFactory 基于客户传递的名字来返回 RealCustomer 或 NullCustomer 对象...NullPatternDemo ,我们的演示类使用 CustomerFactory 来演示空对象模式的用法 范例 1....使用 CustomerFactory ,基于客户传递的名字,来获取 RealCustomer 或 NullCustomer 对象 // author: 搜云库技术团队(tech.souyunku.com

    71420

    AutoMapper:让对象映射变得更简单

    在日常开发中,我们经常需要在不同的对象之间进行数据转换。例如,将数据库查询结果(DTO)转换为业务对象(BO),或将业务对象转换为视图模型(ViewModel)。...AutoMapper 是一个开源的对象映射库,广泛应用于 .NET 开发中。它通过配置映射规则,能够自动将一个对象的属性值复制到另一个对象,从而大大简化了对象之间的转换过程。...四、高级功能 除了基本的属性映射,AutoMapper 还提供了许多高级功能,满足更复杂的开发需求。 1. 集合映射 AutoMapper 支持对集合类型的对象进行映射。...嵌套对象映射 AutoMapper 还支持对嵌套对象进行映射。...对于简单的对象转换,手动编写代码可能更清晰。 3. 测试映射逻辑:在单元测试中验证映射规则是否正确,确保代码质量。

    1.5K10

    对象不再使用时,为什么要赋值为 null ?

    鉴于网上有太多关于此问题的误导,本文将通过实例,深入JVM剖析“对象不再使用时赋值为null”这一操作存在的意义,供君参考。本文尽量不使用专业术语,但仍需要你对JVM有一些概念。...对比两段代码,仅仅将placeHolder赋值为null就解决了GC的问题,真应该感谢“不使用的对象应手动赋值为null“。...仔细想想,Java的世界中,对象与对象之间是存在关联的,我们可以从一个对象访问到另一个对象。如图所示。 再仔细想想,这些对象与对象之间构成的引用关系,就像是一张大大的图;更清楚一点,是众多的树。...总结 希望看到这里你已经明白了“不使用的对象应手动赋值为null“这句话背后的奥义。...我比较赞同《深入理解Java虚拟机》作者的观点:在需要“不使用的对象应手动赋值为null“时大胆去用,但不应当对其有过多依赖,更不能当作是一个普遍规则来推广。

    1.1K20

    Java对象不再使用时,为什么要赋值为null?

    特别是在处理对象时,正确地管理内存不仅关系到程序的性能,还涉及到程序运行时的稳定性。本文将深入探讨为什么在Java中,当对象不再被使用时,赋值为null是一个被推荐的做法。1....为何要将对象赋值为null现在我们来解答主题问题:为何要将不再使用的对象赋值为null?3.1 显式断开引用:赋值为null是显式地告诉垃圾回收器这个对象不再被需要了。...3.3 代码清晰度:将对象赋值为null也是一种良好的编程习惯,它使代码更加清晰,让其他开发者或未来的自己知道这个对象的生命周期已经结束。...因此,理解何时应该赋值为null是很重要的。4.1 长生命周期的对象:对于那些生命周期较长或整个应用程序生命周期内一直存在的对象,赋值为null可能没有太大意义。...在这种情况下,将局部变量赋值为null是不必要的。4.3 使用后立即失效的对象:对于只在短时间内使用并且之后立即失效的对象,赋值为null可能也是多余的。5.

    1.4K11

    Java : 对象不再使用时,为什么要赋值为 null ?

    鉴于网上有太多关于此问题的误导,本文将通过实例,深入JVM剖析“对象不再使用时赋值为null”这一操作存在的意义,供君参考。本文尽量不使用专业术语,但仍需要你对JVM有一些概念。...对比两段代码,仅仅将placeHolder赋值为null就解决了GC的问题,真应该感谢“不使用的对象应手动赋值为null“。...仔细想想,Java的世界中,对象与对象之间是存在关联的,我们可以从一个对象访问到另一个对象。如图所示。 ? 再仔细想想,这些对象与对象之间构成的引用关系,就像是一张大大的图;更清楚一点,是众多的树。...总结 希望看到这里你已经明白了“不使用的对象应手动赋值为null“这句话背后的奥义。...我比较赞同《深入理解Java虚拟机》作者的观点:在需要“不使用的对象应手动赋值为null“时大胆去用,但不应当对其有过多依赖,更不能当作是一个普遍规则来推广。

    1.7K10

    Drools规则引擎-如果Fact对象参数为null如何处理

    使用这种方案,便不存在fact值为null的问题。 增加判断 如果是将三个业务的判断放在一个规则当中,那么对fact对象为null的情况就需要特殊处理了。...比如在when中我们只获取类型为企业的fact对象,而不具体限定条件。这样只要是企业对象进入,都会被规则匹配,而具体的分值计算放在then部分进行处理。...其他方法 那么,针对那位同学的问题,他想通过在插入fact对象之前进行校验排查,这其实是一种选择,选择默认属性为null的值的得分为0。...比如这个打分,如果某一项不传,那默认可能这一项就是0分,但如果传了null值,你可以在规则中对null进行处理,设置为0,你甚至还可以对null值进行处理,设置成负数。...null如何处理/

    1.4K10
    领券