Pure Fabrication
«Чистая выдумка» — абстракция, которой нет в предметной области, но которая нужна машине:
Repository,Storage,Promise,Socket,Array, DAO. Создаётся ради snижения coupling и separation of concerns.
Что это / Зачем
- Не каждая абстракция должна моделировать реальный мир.
- Машино-ориентированные абстракции (буферы, очереди, репозитории) — Pure Fabrication.
- Они снижают зацепление между доменной логикой и инфраструктурой.
Признаки правильного применения
- Класс не имеет аналога в предметной области (бухгалтер, заказ, пациент).
- Класс существует ради техники: хранение, кеш, очередь, доступ к данным.
- Можно подменить реализацию без изменения домена.
Пример: Storage как Pure Fabrication
// домен ничего не знает о файлах
class UserService {
constructor(storage) { this.storage = storage; }
async register(user) { return this.storage.save('users', user); }
}
// Pure Fabrication
class FileStorage {
constructor(path) { this.path = path; }
async save(collection, data) { /* writeFile */ }
async load(collection, id) { /* readFile */ }
}
Многослойность Pure Fabrication
бизнес-логика
↓
Repository ← Pure Fabrication (домен думает в терминах "найти пользователя")
↓
Loader/DAO ← Pure Fabrication (выбор источника: SQL / HTTP / память)
↓
драйвер БД ← Pure Fabrication (TCP-протокол к Postgres)
Антипаттерн
// домен знает про SQL, fs, TCP — нет Pure Fabrication
class Order {
save {
const conn = require('pg').Client;
conn.query(`INSERT INTO orders…`);
}
}
🎓 Источники
- 🎓 [GRASP Pure Fabrication] · 2021-03-10 · YouTube
- «Чистая выдумка улучшает coupling, делает separation of concerns».
- Примеры из реальности:
Promise,Socket,Array, DAL. - Pure Fabrication часто многослойна: репозиторий → загрузчик → драйвер.