0

我正在使用XPO / XAF开发一个应用程序,我需要管理照片以及一些附加信息。

这是我用于照片实体的简化(伪)代码:

public class Photo
{
    public Photo()
    {
        CreationDate = DateTime.UtcNow;
    }

    private Image imageData;

    public Image Data
    {
        get { return imageData; }
        set
        {
            imageData = value;
            // Current Impl: Use static code to create thumbnail
            Thumbnail = ImageService.CreateThumbnail(value);
        }
    }

    public Image Thumbnail { get; private set; }

    public Guid Id { get; }

    public DateTime CreationDate { get; private set; }

    public string Description { get; set; }
}

Photo 实体用于各种其他实体,例如

public class Inspection
{
    public Photo Photo { get; set; }
}

public class User
{
    public Photo Photo { get; set; }
}

每当更改照片的数据时,缩略图也应更新。我发布的解决方案有效,但它很丑陋,不是吗?

而且也无法实现新的要求:应该可以根据使用情况指定(应用程序范围内的)缩略图的质量(例如,检查缩略图的质量较高,用户缩略图的质量较低)。

在 XAF 中,我将使用 ViewController ViewController来实现这个要求,对照片的变化做出反应(考虑到当前的“拥有视图”)。但是这个解决方案有一些缺点:

1) 缩略图属性设置器不能再是私有的。

2)(单元)测试非常困难,因为设置 ViewController 基础设施需要额外的代码。

3) ViewController 仅在有视图时才处于活动状态。但也可以从自定义 OData 服务编辑照片。当然,我可以/应该将 ImageProcessing 代码从 ViewController 移动到实用程序类/方法,但我必须记住在使用我的 OData 控制器时调用此代码。

4) 从通用列表视图查看/编辑照片时,ViewController 不知道要使用哪种质量设置(因为现在,只有通用照片类并且不存在对“所有者”的反向引用)。当然可以继承各种 Photo 类(UserPhoto/InspectionPhoto/...),但这有意义吗?

我认为生成和保留缩略图是一项很常见的任务,因此我对您的想法非常感兴趣。我也喜欢 DDD/富域模型的概念/想法,因此我想知道是否可以在我的情况下采用这些概念

4

1 回答 1

1

你问了一些关于设计的相当主观的问题,没有“正确”的答案,但这里有一些想法。

业务对象中是否需要该Thumbnail属性,因为它仅在视图期间使用?将逻辑拉入 aViewController是有道理的。

对 XAF 进行单元测试非常容易,ControllersDevExpress 支持中心和文档中有几个示例(S32594如何测试操作)。eXpand 框架也有一些很好的示例代码来设置 XAF 框架测试。

另一种选择是为缩略图实现自定义编辑器。您甚至可以将其动态添加到布局中,而无需业务对象中的持久属性。这个页面上有很多关于实现自定义 ViewItems 的选项。

另一种方法是在运行时修改布局以添加非持久缩略图。这里的文档中有一个示例,它将非持久图像控件添加到详细视图。

您可能还对此支持中心问题Q512788 感兴趣

于 2016-06-08T09:16:32.553 回答