同理,如果有一个名为CustomerService的类,它应该仅包含与客户相关的功能 。如果CustomerService类中有执行产品相关操作的方法,应移至ProductService类中 。
与其在CustomerService类中添加执行产品操作的方法,不如在该类中引用ProductService,并调用我们所需的任何方法 。
为了更清晰地介绍这个概念 , 我们来分析一个低内聚的类示例:
public class CustomerPurchaseService {public void saveCustomerPurchase(CustomerPurchase customerPurchase) {// 执行与客户相关的操作registerProduct(customerPurchase.getProduct());// 更新客户信息// 删除客户信息}private void registerProduct(Product product) {// 在客户领域中执行对产品的逻辑操作…}}这个类存在以下问题:
- saveCustomerPurchase方法不止注册产品,还涉及到更新和删除客户的操作 。这个方法承担了过多的职责 。
- registerProduct方法在当前位置难以被其他开发者发现 。因此,如果其他开发者需要类似的功能,可能会不必要地重写这个方法 。
- registerProduct方法处于不恰当的领域 。CustomerPurchaseService不应负责注册产品 。
- saveCustomerPurchase方法调用了一个私有方法,而不是委托给专门处理产品操作的外部类 。
public class CustomerPurchaseService {private ProductService productService;public CustomerPurchaseService(ProductService productService) {this.productService = productService;}public void saveCustomerPurchase(CustomerPurchase customerPurchase) {// 仅执行与客户购买相关的操作productService.registerProduct(customerPurchase.getProduct());}}public class ProductService {public void registerProduct(Product product) {// 在产品领域中执行相关逻辑…}}在这个改进后的版本中,saveCustomerPurchase仅执行其主要职责:保存客户购买信息 。同时,registerProduct方法的职责被正确地委托给了ProductService类,从而使两个类都更加专注和内聚 。现在,这些类及其方法都专注于执行预期的特定任务 。代码解耦_高度耦合的代码_指的是那些具有过多依赖关系的代码,这种情况会导致代码难以维护 。类中定义的依赖(其他类)越多,其耦合程度就越高 。
微服务架构的目标之一就是将服务解耦,如果一个微服务与其他服务都有连接,那么它就会高度耦合 。
想要更好地实现代码复用,就需要尽可能使系统和代码各自独立 。虽然服务和代码之间的通信不可避免会产生一定程度的耦合,但关键在于让这些服务尽可能保持独立性 。
下面是一个高度耦合类的例子:
public class CustomerOrderService {private ProductService productService;private OrderService orderService;private CustomerPaymentRepository customerPaymentRepository;private CustomerDiscountRepository customerDiscountRepository;private CustomerContractRepository customerContractRepository;private CustomerOrderRepository customerOrderRepository;private CustomerGiftCardRepository customerGiftCardRepository;// 其他方法…}注意CustomerService类与许多其他服务类的耦合程度很高 。这么多的依赖意味着该类将包含大量代码,这不利于代码的测试和维护 。更有效的方法是拆分这个类,创造多个依赖更少的服务 。我们可以通过将CustomerService类分解为独立的服务来降低其耦合度:
public class CustomerOrderService {private OrderService orderService;private CustomerPaymentService customerPaymentService;private CustomerDiscountService customerDiscountService;// 省略其他方法…}public class CustomerPaymentService {private ProductService productService;private CustomerPaymentRepository customerPaymentRepository;private CustomerContractRepository customerContractRepository;// 省略其他方法…}public class CustomerDiscountService {private CustomerDiscountRepository customerDiscountRepository;private CustomerGiftCardRepository customerGiftCardRepository;// 省略其他方法…}经过这样的重构 , CustomerService及其他类变得更易于进行单元测试,同时也更便于维护 。类的职责越单一且清晰,就越容易实现新功能 。如果出现 bug,也更容易进行修复 。遵循 SOLID 原则SOLID 代表面向对象编程(OOP)中五个关键的设计原则,它们的目标是使软件系统更加可维护、灵活,并易于理解 。
推荐阅读
- 游戏不能进行多开怎么设置,如何解除游戏多开限制
- 卖烟花爆竹违法,销售烟花爆竹公安如何处理
- 小米摄像头如何回看录像,小米摄像头共享设备如何回看
- 人间水蜜桃牧野真莉爱:颜值与身材的完美融合,你如何看待她的独特魅力?
- 我国车辆违章如何扣分
- 如何网上办理深圳居住证学历认证
- 如何合并word文件到一个文件
- iPhone如何设置来电壁纸
- 如何处理掉色严重布料问题 如何处理掉色严重布料
- 如何判断自己喜欢上了一个人
