Skip to content

memoized computed

awekrx edited this page May 29, 2026 · 1 revision

memoized-computed

Import

import { memoizedComputed } from '@dev-suite/decorators/memoized-computed'

Category

  • property

Use Case

Compute property once and cache result.

Replaces

  • Manual cached getter flags
  • Repeated lazy-computation boilerplate

Example 1

Without decorator

class PricingView {
  private _summary?: Summary;

  get summary() {
    if (!this._summary) this._summary = computeSummary(this.rows);
    return this._summary;
  }
}

With decorator

import { memoizedComputed } from '@dev-suite/decorators/memoized-computed';

class PricingView {
  @memoizedComputed(({ originalThis }) => computeSummary(originalThis.rows))
  summary!: Summary;
}

Why better

  • Centralizes cross-cutting behavior.
  • Method/class/property code stays focused on domain logic.

Example 2

Without decorator

class UserView {
  private _permissions?: string[];

  get permissions() {
    if (!this._permissions) this._permissions = resolvePermissions(this.roles);
    return this._permissions;
  }
}

With decorator

import { memoizedComputed } from '@dev-suite/decorators/memoized-computed';

class UserView {
  @memoizedComputed(({ originalThis }) => resolvePermissions(originalThis.roles))
  permissions!: string[];
}

Why better

  • Second scenario reuses same policy without duplication.
  • Behavior is more consistent and easier to audit.

Clone this wiki locally