これは、実装言語がオブジェクト指向であるかどうかにかかわらず、解決するのが非常に難しい問題です (いずれにせよ、オブジェクト方法論は通常、プログラミング言語が言語構造としてサポートしているかどうかに関係なく適用できます。そのため、私の解決策を言葉で説明しました)オブジェクトの)
あなたができるようにしたいのは、すべてのデータストレージを同等に扱うことです. 実際には、これはほとんど不可能であり、パラダイムを選択してその限界を受け入れる必要があります。たとえば、抽象化の設計を RDBMS パラダイム (接続/クエリ/フェッチ) に基づいて行い、同じインターフェイス内でファイルへのアクセスをカプセル化することを試みることができます。
私が成功して使用したアプローチは、(あなたの場合)従業員の「オブジェクト」内にデータの取得を埋め込むことを避けることです。これにより、プログラム内の従業員の抽象化と保存と取得の間を閉じる結合が作成されます。それはデータです。
代わりに、データを取得して Employee オブジェクトを作成し、そのデータから Employee オブジェクトを作成する別のオブジェクトを作成します。データを適切な汎用構造に変換できれば、任意のデータ ソースから Employee を作成できるようになりました。(連想配列の言語サポートの利点があります。これにより、タプルを渡すプロセスが大幅に簡素化されます。開発言語でこれが困難または不可能になっている場合は、問題が発生する可能性があります)。
これにより、アプリケーションのテストも容易になります。これは、データ ソースの作成 (または、前回そこにあったデータがまだ存在するかどうか) について心配することなく、単体テスト内で直接 Employee "オブジェクト" を作成できるためです。複雑な設計では、このセットアップと破棄がテスト コードの大部分を占める場合があります。さらに、1000 個の従業員「オブジェクト」を作成する必要が生じた場合、データソース (ファイル、データベース、カード インデックスなど) を 1000 回クエリすることなくコードを再利用できます (つまり、有名な ORM N+ をきちんと解決します)。 1クエリの問題)。
要約すると、あなたが説明する隠された依存関係には非常に厄介な落とし穴があるため、データの取得をビジネスロジックから完全に分離してください。IMHO「オブジェクト」の構築内または関数内で特定のデータの取得をカプセル化して、保存されたデータからプロパティを取得することはアンチパターンです。