ここに特効薬はありません。
しかし、私はおそらく次のデザインに行き着くでしょう:
IBinaryDataService: バイナリ形式でのデータの一般的な保存用。保存するオブジェクトには、それを OutputStream に書き込むためのメソッドが必要です。元のオブジェクトにもロードするための便利な方法があるはずです。
IDataIndexService: データ属性/タグのインデックス用で、検索にも役立ちます。あなたが説明したpicのデータに密接に対応しています。
IPicRepo: クライアントに公開される唯一のインターフェイス。クライアントはこれを使用する必要があり、上記の 2 つのサービスについては決して知りません。
FileSystemBinaryDataServiceImpl: 上記の IBinaryDataService の実装。
DbDataIndexServiceImpl: 上記の IDataIndexService の実装。
PicRepoImpl: 上記の IPicRepo の実装。Spring を使用して、FileSystemBinaryDataServiceImpl と DbDataIndexServiceImpl を依存関係として挿入します。
必要に応じて追加の拡張機能:
IPersistentModel: 永続化できるオブジェクトの表現。メソッド write(OutputStream)、read(inputStream)、および getAttributes():Map があります。
PicModel: 上記の IPersistentModel の実装。
PS。これは、一般的な高レベルの概要です。