代码重构的依恋情节,数据泥团,中间人,狎昵关系

1. 依恋情节(Feature Envy)

Feature Envy 是指一个函数或方法过度依赖其他类的属性或方法,这表明它可能更适合在另一个类中实现。这种情况表明代码职责分配不合理,可能导致紧耦合的代码结构,使得系统的维护和扩展变得更加困难。

示例:

class Customer {
public:
  double getDiscountRate() const { return discountRate; }
private:
  double discountRate;
};

class Order {
public:
  double calculateTotal() const {
    return price * quantity * customer.getDiscountRate();  // 依恋情节
  }
private:
  double price;
  int quantity;
  Customer customer;
};

在这个例子中,Order 类的 calculateTotal 方法似乎过度依赖 Customer 类的折扣率信息,表明这段代码更适合在 Customer 类中实现。

2. 数据泥团(Data Clumps)

Data Clumps 指的是经常一起出现的一组数据,它们应该被封装成一个对象。这通常表明这些数据具有某种逻辑关联,应该被归类为一个类或结构体,以提高代码的可读性和可维护性。

示例:

class Order {
public:
  void placeOrder(const std::string& customerName, const std::string& customerAddress, const std::string& customerPhone) {
    // 数据泥土
  }
};

在这个例子中,customerName、customerAddress 和 customerPhone 这三个字段常常一起出现,可能应该封装成一个 Customer 类。

3. 中间人(Middle Man)

Middle Man 是指一个类过度地将请求转发给其他类,自己并没有实际的功能。此时,Middle Man 类变得多余,建议移除它以简化代码结构。

示例:

class Employee {
public:
  double getSalary() const { return salary; }
private:
  double salary;
};

class Manager {
private:
  Employee employee;
public:
  double getEmployeeSalary() const { return employee.getSalary(); }  // 中间人
};

在这个例子中,Manager 类只是简单地转发对 Employee 类的调用,这样的代码可以考虑去掉 Manager 类中的这个方法,直接访问 Employee 类。

4. 狎昵关系(Inappropriate Intimacy)

Inappropriate Intimacy 指两个类之间的耦合过于紧密,它们频繁地访问彼此的私有数据或内部实现。这种紧密的耦合关系可能会导致系统的灵活性和可维护性变差。

示例:

class Car {
public:
  Engine& getEngine() { return engine; }  // 狎昵关系
private:
  Engine engine;
};

class Mechanic {
public:
  void tuneEngine(Car& car) {
    car.getEngine().setFuelInjection(1.2);  // 直接操作 Engine
  }
};

在这个例子中,Mechanic 类直接操作了 Car 类的内部 Engine 对象,这是一种狎昵关系,表明 Car 类和 Mechanic 类的耦合过于紧密。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值