Мощь современных языков программирования может принести вред в неумелых руках.
Возможность лёгким движением руки создавать структуры данных произвольной конфигурации: каждый элемент структуры будет нужного нам типа и называться нужным нам именем (а то и вовсе размещаться под нужным номером) — поставила нас на скользкий путь.
Я говорю о стандартном типе данных «хэш», он же «ассоциативный массив».
Хэш прекрасен, но только до тех пор, пока мы не начинаем его использовать не по прямому назначению, а для представления сущностей предметной области, то есть совокупности атрибутов — значений разного типа и предназначения.
Опасность этого широко распространённого подхода в том, что операции над атрибутами, то есть данными, содержащимися внутри сущностей, отрываются от самих данных.
У большинства сущностей в проекте есть поведение, то есть специфические только им присущие операции над атрибутами. Применить хэш для хранения сущности — то же самое, что создать класс с открытыми полями и без единого метода, да ещё и без явного объявления полей, то есть трижды ущербный класс.
Инкапсуляция как раз и придумана для того, чтобы объединить данные с операциями над ними, да ещё и скрыть реализацию этих операций.
Хэши предназначены для хранения коллекций однородных объектов, доступ к которым предоставляется не по номеру, а по значению произвольного типа (строке и т. п.).
Смотри также
- Анемичиные коллекции
- Рефакторинг «Замена массива объектом»