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

我应该在域模型中为图像使用哪种数据类型?

  •  3
  • NotDan  · 技术社区  · 17 年前

    鉴于这些信息,我应该如何处理我个人的图像?

    5 回复  |  直到 17 年前
        1
  •  5
  •   Marc Gravell    17 年前

    好, byte[] (或包裹着某物) byte[] )它相当便携。..大多数其他东西都将是特定于实现的。

    实际上 /people/images/12345 或其他)。

    对于存储,通常两者都可以。..在SQL Server 2008中,您可以使用文件流类型同时执行这两项操作。在数据库中存储BLOB的问题之一是增加大小,但一些(小)映像通常不会造成伤害(除非您使用的是SQL Express并且数据库大小有上限)。但是使用数据库的优点是,单个备份包含所有内容。

    尽管如此,我所做的几乎每一个这样的实现都使用了文件。

        2
  •  2
  •   Cory R. King    17 年前

    你真的在用二进制blob做任何事情吗?如果没有,请传递对文件系统上某些内容的引用。如果你开始随身携带,我会担心惹毛的 byte[] 是什么的。

    如果你是WPF,那么一切都需要一个URI作为ImageSource:

    BitmapImage pic = new BitmapImage(new Uri("YourAssembly;components/images/something.jpg"));
    

    crossdomain.xml 你正在分发这些东西的域名上的文件。

    如果你确实需要弄乱二进制blob,那么把所有这些都当作 Stream 以某种形式,并有你的 Person.Image 类提供了一种方法来获得 StreamReader / StreamWriter GetImageStream() 。然后,您的数据库内容可以获得 流阅读器 ,不 byte[] .

    …只是一些想法。别忘了BitmapImage也可以让你访问它的流,但你必须在文档中查找:-)希望这能有所帮助。

        3
  •  1
  •   elo80ka    17 年前

    我选择文件系统有几个原因:

    1. 您不必将图像类型存储在单独的字段中(BMP?JPEG?PNG?)
    2. 您可以选择使用轻量级、微调的服务器来为您的图像提供服务(或者,如果您的缩放需要,可以选择多个)
    3. 您不需要在代码中弄乱byte[],只需使用字符串即可
    4. 如果您决定更改数据库,您将遇到更少的问题——您甚至可以使用INSERT脚本进行迁移
        4
  •  1
  •   Stephan Eggermont    17 年前

    最好的做法是概括困难的决定。定义自己的Image类并隐藏实现。

    假设您没有编写图像编辑应用程序,image类的域部分将很薄。表示和存储不在域映像类中,而是在适配器中。

        5
  •  0
  •   MartinStettner    17 年前

    System.Drawing.Image 这几乎与技术无关。它代表了你想要的东西(imo):可以以某种众所周知的图像格式从某个流加载/保存到某个流,并且可以在屏幕上显示(在WinForms或WPF中)的东西。