import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/vi/functional/Classes/DesignChanged - Tiện ích theo dõi thay đổi'/>

# Lớp DesignChanged

Một lớp tiện ích được thiết kế để theo dõi các thay đổi trong thuộc tính đối tượng. Nó duy trì một bộ nhớ đệm (cache) cho các giá trị trước đó và cung cấp các phương thức để phát hiện sự khác biệt giữa trạng thái hiện tại và trạng thái cập nhật lần cuối.

## Các tính năng chính

- **So sánh hiệu quả** — so sánh các giá trị thuộc tính hiện tại với bộ nhớ đệm cục bộ để xác định các thay đổi.
- **Theo dõi có chọn lọc** — hỗ trợ theo dõi một tập hợp con cụ thể của các thuộc tính thông qua tham số `watch`.
- **Cập nhật hàng loạt** — cung cấp cách để đồng bộ hóa toàn bộ bộ nhớ đệm với trạng thái hiện tại của các thuộc tính.

## Khởi tạo

Tạo một thực thể `DesignChanged` mới. Lớp này được thiết kế để theo dõi các thay đổi trong thuộc tính đối tượng bằng cách so sánh chúng với một bộ nhớ đệm nội bộ (trạng thái tại thời điểm cập nhật lần cuối).

**Tham số:**
- `props: T` — đối tượng dữ liệu có các thuộc tính cần được theo dõi.
- `watch: string[] = Object.keys(props)` — một mảng gồm các tên thuộc tính (khóa) để theo dõi. Theo mặc định, tất cả các thuộc tính của đối tượng `props` đều được theo dõi.

```typescript
import { DesignChanged } from '@dxtmisha/functional'

// 1. Theo dõi tất cả các thuộc tính theo mặc định
const props = { title: 'Xin chào', count: 1 }
const tracker = new DesignChanged(props)

// 2. Theo dõi các thuộc tính cụ thể (tập hợp con)
const trackerPartial = new DesignChanged(props, ['title'])

console.log(tracker.isChanged()) // false
```

## Phát hiện thay đổi

### `is`

Kiểm tra xem các thuộc tính cụ thể có bị thay đổi kể từ lần cập nhật cuối cùng hay không.

**Tham số:**
- `name: string | string[]` — tên của một thuộc tính hoặc một mảng các tên thuộc tính cần kiểm tra.

**Trả về:** `boolean` — `true` nếu bất kỳ thuộc tính nào được chỉ định đã thay đổi.

### `isChanged`

Kiểm tra xem bất kỳ thuộc tính nào đang được theo dõi (được định nghĩa trong danh sách `watch`) có thay đổi hay không.

**Trả về:** `boolean` — `true` nếu ít nhất một thuộc tính đang theo dõi có giá trị khác.

## Đồng bộ hóa dữ liệu

### `update`

Đồng bộ hóa bộ nhớ đệm nội bộ với giá trị hiện tại của tất cả các thuộc tính đang được theo dõi. Sau khi gọi phương thức này, `isChanged()` sẽ trả về `false` cho đến khi các thuộc tính được sửa đổi lại.

**Trả về:** `void`

