Дизайн приложения: создание и сохранение эскизов изображений в приложении XAF/XPO.

Я разрабатываю приложение с помощью 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 я бы реализовал это требование с помощью ViewControllerViewController, реагирующего на изменения фотографии (принимая текущий «владеющий вид» во внимание). Но у этого решения есть некоторые недостатки:

1) Установщик свойства эскиза больше не может быть приватным.

2) Это довольно сложно (модульное) тестирование, потому что для настройки инфраструктуры ViewController требуется дополнительный код.

3) ViewController активен только при наличии представления. Но также возможно редактировать фотографии из пользовательской службы OData. Конечно, я могу/должен переместить код ImageProcessing из ViewController в служебный класс/метод, но я должен не забывать вызывать этот код при использовании моих контроллеров OData.

4) При просмотре/редактировании фотографий из общего списка ViewController не знает, какую настройку качества использовать (поскольку прямо сейчас существует только общий класс Photo и не существует обратной ссылки на «владельца»). Конечно, можно наследовать различные классы Photo (UserPhoto/InspectionPhoto/...), но имеет ли это смысл?

Я думаю, что создание и сохранение эскизов — довольно распространенная задача, поэтому мне очень интересны ваши идеи. Мне также нравятся концепции/идеи модели DDD/rich-domain, поэтому я хотел бы знать, можно ли применить такие концепции к моей ситуации.


person krombi    schedule 03.06.2016    source источник


Ответы (1)


Вы задаете довольно субъективные вопросы о дизайне, и нет «правильного» ответа, но вот некоторые мысли.

Необходимо ли свойство Thumbnail в бизнес-объекте, поскольку оно используется только во время представления? Вытягивание логики в ViewController имеет смысл.

Модульное тестирование XAF Controllers довольно просто, и в центре поддержки DevExpress и в документации есть несколько примеров (S32594, Как протестировать действие). Кроме того, платформа eXpand содержит несколько хороших примеров кода. для настройки тестов платформы XAF.

Другой вариант — внедрить собственный редактор для эскиза. Вы даже можете добавить его в макет динамически без постоянного свойства в бизнес-объекте. На этой странице есть множество вариантов реализации пользовательских ViewItem.

Еще один подход заключается в изменении макета во время выполнения для добавления непостоянной миниатюры. В документации здесь есть пример, который добавляет непостоянный элемент управления изображением в подробное представление. .

Вас также может заинтересовать этот вопрос центра поддержки Q512788.

person shamp00    schedule 08.06.2016