gpt4 book ai didi

web-services - 域模型中的文件

转载 作者:行者123 更新时间:2023-12-04 05:14:59 25 4
gpt4 key购买 nike

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

文件:

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

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

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

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

    最佳答案

    您必须小心不要尝试在这里将太多功能硬塞到单个类中,您的措辞听起来有点像您想要一个可以完成所有工作的"file"对象,这不是一个好主意。

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

    拥有一个 FileAttributesDTO 类或类似的类可能是有意义的,只是为了将它与处理物理文件时区分开来。在真正开始之前,您需要考虑分离关注点并确定尽可能多的用例。例如,您是否真的需要额外的信息,或者一个简单的 FTP 服务包装器可以满足您的所有需求。

    关于web-services - 域模型中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1629387/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com