域模型中的文件

时间:2009-10-27 08:19:48

标签: web-services orm file model dns

在域模型中处理二进制文件的最佳做法是什么?我经常必须将图像和其他文件与业务对象关联起来,即使对于最简单的情况,简单的字节[]也是不够的。

文件:

  • 没有固定的尺寸,因此可能非常大:
    • 必须进行流式传输或缓冲,最好采用异步方式;
    • 必须在服务器和客户端上进行缓存,以避免冗余传输;
    • 在不可靠的连接上,数据传输很容易被中断,必须如此 恢复 - 因此转移可以不是从文件的开头开始,而是从任意位置开始。
  • 处理方式与其他数据不同:
    • 在网络应用程序中不是页面内容的一部分,而是由浏览器单独下载;
    • 可能是由第三方软件处理的黑匣子;
    • 出于性能原因,甚至可能无法存储在数据库中。

我们如何在域模型中(或更具体地说,在模型类中)表达此类文件?如果模型的其余部分通过DTO和WCF Web服务传输并在数据库中保留NHibernate,但文件不一定如此,如何使文件处理透明,整个事务的一部分在适用的情况下支持所有必要的它们不仅可以在Web应用程序中使用,还可以在普通桌面应用程序中使用。

对于WPF和ASP.NET,文件对象必须公开某种形式的Url属性,该属性可以数据绑定到WPF控件或用于IMG或HTML标记。上传文件要复杂得多。优选地,必须在那里维护适当的演示和内容实践,例如MVVM。

我真的迷失在这里,因为我对以前的任何解决方案都不满意。你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你必须小心,不要试图在这里将过多的功能强加到单个类中,你的措辞听起来有点像你想要一个“文件”对象来完成所有事情,这不是一个好主意。

你需要有一个文件表示的概念,可以在你所识别的任何地方传递 - 但这只需要一个标识符和可能的名称 - 然后由各个组件决定如何他们对此进行处理,例如HTML页面可能使用File json对象并推断需要使用ftp://xxx/uploads/ {id}或其他东西检索jsFile.Id,同时为了显示WCF服务可能会收到的其他相关信息文件ID并在数据库中查找信息。

拥有一个FileAttributesDTO类或类似的东西可能是有意义的,只是为了区别于处理物理文件时。在真正开始之前,您需要考虑对问题的分离并确定尽可能多的用例。例如,您是否真的需要其他信息,或者围绕FTP服务的简单包装器可以为您提供所需的一切。