Это очень сложная проблема, чтобы решить, является ли ваш язык реализации объектно-ориентированным или нет (и в любом случае методологии объекта обычно могут применяться независимо от того, поддерживает ли язык программирования их как языковую конструкцию, поэтому я описал свой решение по объектам)
То, что вы хотели бы сделать, - это одинаково относиться ко всему хранилищу данных. На самом деле это практически невозможно, и вы должны выбрать парадигму и принять ее пределы. Например, можно создать дизайн вашей абстракции на основе парадигмы СУБД (connect / query / fetch) и попытаться инкапсулировать доступ к файлам с помощью того же интерфейса.
Подход, который я использовал с успехом, состоит в том, чтобы избежать встраивания извлечения данных в (в вашем случае) «объект» Сотрудника, поскольку это создает связь, которая должна закрывать абстракцию Сотрудника в программе и хранилище. и получение его данных.
Вместо этого я создаю отдельный объект, отвечающий за извлечение данных для создания объекта Employee, и, в свою очередь, создаю объект Employee из этих данных. Теперь я могу построить Employee из любого источника данных, при условии, что я могу перевести данные в соответствующую общую структуру. (У меня есть преимущество языковой поддержки ассоциативных массивов, которая значительно упрощает процесс передачи кортежей, у вас могут возникнуть проблемы, если ваш язык разработки затруднит или сделает невозможным это).
Это также облегчает тестирование приложения, поскольку я могу создать «объект» Employee непосредственно в своем модульном тесте, не беспокоясь о создании источника данных (или о том, все ли еще были данные, которые были там в прошлый раз). В сложной конструкции эта настройка и разбор могут составлять большую часть тестового кода. Кроме того, в случае необходимости создания 1000 «объектов» сотрудников, я могу повторно использовать свой код, не запрашивая источник данных (файл, БД, картотека и т. Д.) 1000 раз (другими словами, это аккуратно решает знаменитый ORM N + 1 проблема запроса).
Итак, подведем итог: отделите извлечение данных от бизнес-логики полностью, так как описанная вами скрытая зависимость имеет некоторые очень неприятные подводные камни. ИМХО, это анти-шаблон для инкапсуляции извлечения определенных данных в конструкции "объекта" или в функции для извлечения свойства из некоторых сохраненных данных.