Architecture 在DDD中,用户在哪里保存生成的文件?

Architecture 在DDD中,用户在哪里保存生成的文件?,architecture,domain-driven-design,Architecture,Domain Driven Design,我的项目中有以下体系结构: 用户界面->应用程序->域->基础架构(4层) 我需要允许用户上传一张图片,在哪里保存用户生成的文件比较好?在UI项目的文件夹中 更新: 以下是我的文件夹结构: 谢谢你的回答,但我也想知道在哪里保存物理文件 更新2: 我的应用程序是CMS,这些图像是用户生成的内容。让基础设施处理这些细节。如果需要任何类型的验证或业务规则,那么只需像处理常规数据一样处理它,因为这就是它的全部。唯一的区别是您可能将此数据保存在不同的位置,但这是一个实现细节 稍后,您可能希望将这些文件存

我的项目中有以下体系结构:

用户界面->应用程序->域->基础架构(4层)

我需要允许用户上传一张图片,在哪里保存用户生成的文件比较好?在UI项目的文件夹中

更新:

以下是我的文件夹结构:

谢谢你的回答,但我也想知道在哪里保存物理文件

更新2:


我的应用程序是CMS,这些图像是用户生成的内容。

让基础设施处理这些细节。如果需要任何类型的验证或业务规则,那么只需像处理常规数据一样处理它,因为这就是它的全部。唯一的区别是您可能将此数据保存在不同的位置,但这是一个实现细节

稍后,您可能希望将这些文件存储在数据库或版本控制中。。。仍然是可以抽象到基础架构层的实现细节

更新:确定,在驱动器上物理保存文件的位置如果是我,不会将它们与我的代码混合存储,因为这似乎会很快变得复杂。 假设您想开始在版本控制中存储这些文件,现在您正在将一个版本控制系统中的代码与另一个版本控制系统中的数据混合在一起,所有这些都在同一个位置。我可能会选择一个与您的代码至少有一点不同的地方:

两个想法:

Venus.Application
Venus.Domain
Venus.Infra
Venus.Tests
Venus.UI.Web
Venus.Files (or Data)


我确实做了一些类似于上传用户xml文件的事情,并将文件保存在第二个文件夹中,并且在一段时间内工作正常,但后来我决定,这些文件最好以文本形式存储在数据库中,然后仅在需要导出时才写出。

我认为这取决于上载的图像文件的特征。它们的预期用途是什么,需要储存多长时间。对于那些不需要停留很长时间的短期图片,TEMP是一个绝佳的拍摄地点

如果它们是长期/永久文件,那么您需要考虑它们如何适合您的域模型。如果您的域以处理用户的图像为中心,那么他们可能应该在您的域文件夹中占有一席之地(请记住,您不能忘记将用户上传的文件复制到Web服务器无法公开访问的位置的安全方面,但我假设您正在处理这一点)

但是,如果这些图像对域不是那么重要,并且它们可能用于美化/自定义用户的web体验,那么它们可能属于UI文件夹中的某个位置


DDD是关于设计一个尽可能接近问题领域的解决方案;您应该最了解您的域,使用您的最佳判断。

关于物理存储它们的位置,我个人会将它们存储在数据库中,方法是将它们作为二进制存储在数据库提供的二进制数据类型之一中

您可以简单地在对象/DTO上设置一个Image属性,以便在保存时将其转换为字节


根据我的经验,将所有用户数据保存在数据库中而不是使用物理文件的麻烦要小得多,因为您不必担心唯一的文件名、权限和移动服务器/部署等问题,因为这些数据都包含在数据库中,您可以轻松地进行备份和移动。

,您希望它与您的域密切相关,这很好。我要特别强调的是,你可以让基础设施处理这些细节,无论你决定在哪里存储这些细节。@Danny我的应用程序是CMS,这些图像是用户生成的内容。保存位置?假设CMS中的图像是用户生成的与CMS域相关的内容,那么域下的UserContent文件夹可能是合适的。。。
Venus.Application
Venus.Domain
Venus.Infra
    \Files (or Data)
Venus.Tests
Venus.UI.Web