エンティティを永続性とサービスに依存しないようにしようとしていますが、エンティティのBLOBおよびファイルに対応するプロパティに関しては問題が発生しています。集合体の中に、そのようなエンティティがあるとしましょう(たとえば、基本的なものに保たれています)。
class Attachment
{
private $_ownerId;
private $_filename;
private $_type;
private $_size;
public function __construct ($ownerId, $filename, $type, $size)
{
$this->_ownerId = $ownerId;
$this->_filename = $filename;
$this->_type = $type;
$this->_size = $size;
}
// some getters, etc.
}
私が検討した、または検討しているアプローチ:
- のようなメソッドを使用して、サービスインターフェイス、「FileProvider」などを作成します
load (Attachment $file)
。その実装者は、ファイルのバイナリを取得して返す方法を知っています。- これにより、データアクセスロジック(FileProviderMysql、FileProviderDirectory、FileProviderRemoteFTPなど)の複数の実装が可能になります。
- これは、エンティティまたは値オブジェクト内に収まらないように見える動作をカプセル化するオブジェクトとしてのサービスクラスのEricEvansの説明に適合しているようです。
- Evansの本には、サービスクラスが、単純化された意図を明らかにするインターフェイスを使用して、厄介なインターフェイスまたはレガシーインターフェイスへのアクセスをカプセル化する例もあります。
- おそらく、エンティティ自体に上記のインターフェイスの実装を注入して、エンティティのコンテンツを他のプロパティと同じ構文でオンザフライで取得できるようにします。
- このように、アグリゲートのリポジトリ(またはその現在の戦略)は、現在のストレージ実装に対応するサービス実装を注入する機能を持ち、クライアントとアプリケーションサービスがその呼び出しを行うことから解放されます
- ただし、エンティティがサービスインターフェイスについて本当に「知っている」必要があるかどうかはわかりません。
このシナリオの経験がある人は、私が決断を下すのを手伝ってくれませんか?私がしている仕事が持ちこたえることを確認したいと思います。ありがとうございました...