Паттерн "Особый случай" в Typescript
Паттерн "Особый случай" (Special Case) используется для обработки крайних случаев или ситуаций, которые не соответствуют обычной логике обработки, с использованием специальных объектов или значений. Этот паттерн помогает уменьшить количество проверок на null
или других исключительных случаев в коде, делая его более читаемым и поддерживаемым.
Пример использования паттерна "Особый случай" в TypeScript:
Предположим, у нас есть класс User
, который содержит информацию о пользователе, и у нас может быть случай, когда пользователь не найден (null или undefined). Вместо того чтобы постоянно проверять, существует ли пользователь, мы создадим специальный объект, который будет представлять случай, когда пользователь не найден.
typescriptCopy codeclass User { constructor(public id: number, public name: string) {} getDisplayName(): string { return this.name; } } class NullUser extends User { constructor() { super(0, 'Guest'); } getDisplayName(): string { return 'Guest User'; } } class UserRepository { private users: User[]; constructor() { this.users = [ new User(1, 'Alice'), new User(2, 'Bob') ]; } getUserById(id: number): User { const user = this.users.find(user => user.id === id); if (!user) { return new NullUser(); } return user; } } // Пример использования const userRepository = new UserRepository(); const user1 = userRepository.getUserById(1); console.log(user1.getDisplayName()); // Вывод: Alice const user2 = userRepository.getUserById(3); console.log(user2.getDisplayName()); // Вывод: Guest User
- Класс
User
представляет обычного пользователя с методами и свойствами. - Класс
NullUser
расширяет классUser
и представляет специальный случай, когда пользователь не найден. Он предоставляет реализацию методаgetDisplayName
, который возвращает "Guest User". - Класс
UserRepository
содержит методgetUserById
, который ищет пользователя по ID. Если пользователь не найден, он возвращает экземплярNullUser
. - При использовании
UserRepository
, если пользователь с заданным ID найден, возвращается обычныйUser
, если не найден — возвращаетсяNullUser
, что позволяет избежать проверки на null при каждом использовании пользователя.
Этот паттерн упрощает работу с объектами, делая код более чистым и понятным.