我试图保持我的实体持久性和服务无知,但是当涉及到实体的 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 等)
- 这似乎符合 Eric Evans 将服务类描述为封装了似乎不适合实体或值对象的行为的对象
- 在 Evans 的书中也有示例,其中服务类使用简化的、意图揭示的接口封装对笨拙或遗留接口的访问
- 可能将所述接口的实现注入实体本身,以便可以使用与其任何其他属性相同的语法即时获取实体的内容
- 这样,聚合的存储库(或其当前策略)将能够注入与当前存储实现相对应的服务实现,从而使客户端和应用程序服务免于进行该调用
- 但是,我不确定实体是否应该真正“了解”服务接口
在这种情况下有经验的人可以权衡一下并帮助我做出决定吗?我想确保我正在做的工作能够坚持下去。谢谢...