如何通过DDD处理代表图片或文件等实体的域对象?

时间:2015-01-17 19:34:20

标签: domain-driven-design

当文件句柄不应用无处不在的语言时,我似乎无法找到任何关于对代表文件的事物进行建模的示例或博客。是否可以在系统中包含文件句柄的实体(如图像或文档),或者我是否会出错。请帮忙

2 个答案:

答案 0 :(得分:2)

这取决于。如果图片或文件是您网域的一部分(假设您正在构建一些照片应用),则可以在您的域中表示它们。但是,如果文件只是您正在使用的某种存储机制,那么应将其从域中抽象出来。

没有明确的答案,因为这在很大程度上取决于您的域名。

我最近遇到了与电子邮件相同的问题。假设您有以下规则:

  

在注册时向用户发送电子邮件

假设您还决定将电子邮件队列存储在与您的域相同的数据库中。将电子邮件的概念作为您域的一部分似乎很好。但你必须问自己以​​下问题。

  • 如果我想发送短信和电子邮件怎么办?
  • 如果您决定使用未管理的电子邮件服务该怎么办?

在这两种情况下,您都必须直接更改域名。

更好的方法是添加基础架构层。在您的域中,您将拥有类似IUserNotifier的界面,然后您将在基础架构层中实施此界面。 Sudo域代码可能如下所示:

IUserNotifier.NotifyOfRegistration(newUser)

现在,您可以轻松实现通知程序,以发送电子邮件,文本或致电第三方服务等。您的域名不是更明智的,不需要更改。

我知道我的例子没有直接回答你的问题,而是给你一些关于如何思考问题的指导。

这是关于域驱动设计的事情。它完全以域名为中心,因此每个案例都是独一无二的。

答案 1 :(得分:1)

文件句柄通常不会成为大多数域的一部分,因为它们位于基础架构级别。如果您正在构建与基础架构级别相关的内容,那么它将非常好。

如果您有ImageDocument这样的业务概念,那么可能包含文件句柄或路径,如果您与基础架构绑定在一起。不过,您也可以选择更通用的内容,例如DescriptorUri。也许某些文档是基于文件的,而其他文档存储在内容引擎中。你可以这样:

file://c:/somewhere/some-file.txt

content://my-server/some-content-id

然后,例如,要获得Stream以返回真实的物理内容,您可以根据方案/描述符获取一些服务以获取流。

但是根据你的喜好,会有一些选择。 :)