JavaScript对象设计终极指南:7个实战技巧告别面条代码

JavaScript对象设计终极指南:7个实战技巧告别面条代码

【免费下载链接】clean-code-javascript Clean Code concepts adapted for JavaScript 【免费下载链接】clean-code-javascript 项目地址: https://gitcode.com/GitHub_Trending/cl/clean-code-javascript

在JavaScript开发中,对象设计是构建高质量应用的基础。不良的对象设计会导致代码难以维护、扩展性差,最终形成令人头疼的"面条代码"。本文将分享7个基于clean-code-javascript项目的实战技巧,帮助你编写更优雅、可维护的对象代码。

1. 使用有意义且可发音的变量名

变量名应清晰表达其用途,避免模糊或过于简短的命名。一个好的变量名能让代码自文档化,减少注释需求。

反面示例:

const yyyymmdstr = moment().format("YYYY/MM/DD");

正面示例:

const currentDate = moment().format("YYYY/MM/DD");

这种命名方式不仅提高了可读性,也使代码更易于搜索和重构。在clean-code-javascript项目中,我们可以看到大量遵循此原则的代码示例,如使用expectedSalary而非es,使用githubLink而非gh等。

2. 避免不必要的上下文重复

当对象或类名已经提供了足够的上下文时,属性名不应重复这些信息。这会使代码更加简洁。

反面示例:

const Car = {
  carMake: "Honda",
  carModel: "Accord",
  carColor: "Blue"
};

function paintCar(car, color) {
  car.carColor = color;
}

正面示例:

const Car = {
  make: "Honda",
  model: "Accord",
  color: "Blue"
};

function paintCar(car, color) {
  car.color = color;
}

通过移除重复的"car"前缀,代码变得更加简洁,同时保持了清晰的含义。这种做法在整个clean-code-javascript项目中都有体现,如使用make而非carMake

3. 函数参数应控制在2个以内

理想情况下,函数应只接受1-2个参数。当需要更多参数时,应考虑使用对象来封装这些参数,提高代码的可读性和可维护性。

反面示例:

function createMenu(title, body, buttonText, cancellable) {
  // ...
}

createMenu("Foo", "Bar", "Baz", true);

正面示例:

function createMenu({ title, body, buttonText, cancellable }) {
  // ...
}

createMenu({
  title: "Foo",
  body: "Bar",
  buttonText: "Baz",
  cancellable: true
});

使用对象作为参数有多个好处:参数顺序不再重要,新增参数时不会破坏现有调用,且通过解构语法可以清晰地看到函数使用了哪些属性。clean-code-javascript项目中的createMenu函数就是这种模式的典型应用。

4. 函数应该只做一件事

这是软件 engineering中最重要的原则之一。当函数只做一件事时,它们更容易被理解、测试和维护。

反面示例:

function emailClients(clients) {
  clients.forEach(client => {
    const clientRecord = database.lookup(client);
    if (clientRecord.isActive()) {
      email(client);
    }
  });
}

正面示例:

function emailActiveClients(clients) {
  clients.filter(isActiveClient).forEach(email);
}

function isActiveClient(client) {
  const clientRecord = database.lookup(client);
  return clientRecord.isActive();
}

通过将功能分解为更小的函数,每个函数专注于单一职责,代码变得更加清晰和可重用。clean-code-javascript项目中的emailActiveClientsisActiveClient函数展示了这种分离关注点的方法。

5. 使用类和继承实现多态

避免使用大量条件语句来处理不同类型的对象,而是利用类和继承来实现多态行为。

反面示例:

class Airplane {
  getCruisingAltitude() {
    switch (this.type) {
      case "777":
        return this.getMaxAltitude() - this.getPassengerCount();
      case "Air Force One":
        return this.getMaxAltitude();
      case "Cessna":
        return this.getMaxAltitude() - this.getFuelExpenditure();
    }
  }
}

正面示例:

class Airplane {
  // ...
}

class Boeing777 extends Airplane {
  getCruisingAltitude() {
    return this.getMaxAltitude() - this.getPassengerCount();
  }
}

class AirForceOne extends Airplane {
  getCruisingAltitude() {
    return this.getMaxAltitude();
  }
}

class Cessna extends Airplane {
  getCruisingAltitude() {
    return this.getMaxAltitude() - this.getFuelExpenditure();
  }
}

通过创建不同的子类并覆盖方法,我们消除了条件语句,使代码更易于扩展。当需要添加新的飞机类型时,只需创建一个新的子类,而不必修改现有代码。clean-code-javascript项目中的飞机类层次结构展示了这种设计模式的优势。

6. 优先使用ES6类而非原型

ES6引入的class语法提供了更清晰、更简洁的方式来创建对象和实现继承,相比传统的原型语法更易于理解和维护。

反面示例:

function Animal() {}
Animal.prototype.move = function move() {};

function Mammal() {
  Animal.call(this);
}
Mammal.prototype = Object.create(Animal.prototype);
Mammal.prototype.liveBirth = function liveBirth() {};

function Human() {
  Mammal.call(this);
}
Human.prototype = Object.create(Mammal.prototype);
Human.prototype.speak = function speak() {};

正面示例:

class Animal {
  move() {}
}

class Mammal extends Animal {
  liveBirth() {}
}

class Human extends Mammal {
  speak() {}
}

ES6类语法使继承关系更加清晰,代码结构更加直观。clean-code-javascript项目推荐使用这种现代语法来组织对象层次结构,如AnimalMammalHuman类的实现。

7. 实现方法链以提高可读性

通过在类方法中返回this,可以实现方法链,使代码更加简洁和可读。

示例:

class Car {
  setColor(color) {
    this.color = color;
    return this;
  }

  setMake(make) {
    this.make = make;
    return this;
  }

  setModel(model) {
    this.model = model;
    return this;
  }
}

const car = new Car()
  .setColor("red")
  .setMake("Honda")
  .setModel("Accord");

方法链允许我们在一行中调用多个方法,使代码更加流畅和易于理解。clean-code-javascript项目中提到,在类函数的末尾返回this,可以将更多的类方法链接到它上面,从而提高代码的可读性和表达力。

总结

良好的对象设计是编写高质量JavaScript代码的关键。通过遵循上述7个技巧——使用有意义的变量名、避免不必要的上下文重复、控制函数参数数量、确保函数只做一件事、利用类和继承实现多态、优先使用ES6类语法以及实现方法链——你可以编写出更优雅、更可维护的代码,告别面条代码的困扰。

这些原则不仅适用于对象设计,也是clean-code-javascript项目所倡导的整体代码质量理念的重要组成部分。通过持续实践这些技巧,你的JavaScript代码将变得更加专业、高效和令人愉悦。

要开始使用这些最佳实践,你可以通过以下命令克隆clean-code-javascript项目:

git clone https://gitcode.com/GitHub_Trending/cl/clean-code-javascript

【免费下载链接】clean-code-javascript Clean Code concepts adapted for JavaScript 【免费下载链接】clean-code-javascript 项目地址: https://gitcode.com/GitHub_Trending/cl/clean-code-javascript

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值