代码之家  ›  专栏  ›  技术社区  ›  Arunas

域模型中的文件

  •  4
  • Arunas  · 技术社区  · 16 年前

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

    文件:

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

    我们如何在域模型中(或者更具体地说,在模型类中)表达这些文件?如果模型的其余部分通过DTOS和WCF Web服务传输,并在数据库中使用nhibernate进行持久化,但文件不一定如此,如何使文件处理透明,这是整个事务的一部分(如果适用),但支持所有这些文件不仅在Web应用程序中使用,而且在顺序中使用。Ry桌面应用程序。

    对于WPF和ASP.NET,文件对象必须公开某种形式的URL属性,这些属性可以是绑定到WPF控件的数据,也可以用于IMG或HTML标记中。上传文件要复杂得多。最好,在那里必须保持适当的表示和内容实践,如MVVM。

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

    1 回复  |  直到 14 年前
        1
  •  0
  •   dice    14 年前

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

    您需要有一个文件表示的概念,这个概念可以在您确定的任何地方传递,但这只需要一个标识符,可能还有一个名称,然后由各个组件决定如何处理这个问题,例如,HTML页面可能使用一个文件json对象,并推断jsfile.id需要检索时使用 ftp://xxx/uploads/ id或其他,而为了显示其他相关信息,WCF服务可能会接收文件id并在数据库中查找信息。

    将fileattributesdto类或其他类似的属性与处理物理文件时进行区分可能是有意义的。在真正开始之前,您需要考虑将关注点分离,并尽可能多地确定用例。例如,您是否真的需要额外的信息,或者一个围绕FTP服务的简单包装器能够满足您的所有需求。