2009-10-27 53 views
4

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

的文件:

  • 不具有固定的大小,并且可以是相当大从而:
    • 不得不被流传输或缓冲,优选以异步方式;
    • 必须缓存在服务器和客户端上,以避免冗余传输;
    • 在不可靠的连接上,数据传输可能很容易中断,必须重新启动 - 因此传输可能不是从文件的开头开始,而是从任意位置开始。
  • 比其余数据处理方式不同:
    • 在Web应用程序是不是网页内容的一部分,但通过浏览器单独下载;
    • 可能是由第三方软件处理的黑盒子;
    • 由于性能原因,甚至可能不会存储在数据库中。

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

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

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

+0

我不知道有任何组件或最佳做法提供这样的事情。您很可能只需按照指定的要求对您的需求进行完全自定义实施。可能有一些文件传输组件/代码可用,它们可以帮助您分开,但这可能不会节省太多时间。 – 2009-10-28 17:42:08

回答

0

你必须小心,不要试图在单个课堂上过多地把功能放在这里,你的措辞听起来有点像你想要一个能完成任何事情的单个“文件”对象,这不是一个好主意。

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

这可能是有道理的有一个FileAttributesDTO类或一些只是为了区别它与处理物理文件时。您需要考虑分离问题,并确定尽可能多的用例。例如,你是否真的需要额外的信息,或者只是一个简单的FTP服务包装,可以满足你所有的需求。