53

Encapsulate Record


Goal

A bare record (plain object with public fields) becomes a class whose properties are accessed through methods that can validate, log, or derive.

Before the refactoring
const org = { name: 'Acme', country: 'US' };
console.log(org.name);
After the refactoring
class Org {
  constructor({ name, country }) { this._name = name; this._country = country; }
  name()    { return this._name; }
  country() { return this._country; }
}
console.log(new Org(org).name());
Savings

Field renames stay internal; invariants can be enforced on every read or write; the record becomes a real domain object.

Note

Wrapping every record adds ceremony — only worth it when behavior or validation will accrete around the data.