Где в DDD хранить пользовательские исключения (исключения приложений)? На уровне инфраструктуры?

Я создаю приложение со следующей архитектурой:

Пользовательский интерфейс - Приложение - Домен - Инфраструктура

У меня есть уровень приложения, который требует использования настраиваемых исключений. Где я храню эти пользовательские исключения? На уровне инфраструктуры? Проблема в том, что на моем уровне приложения нет ссылки на уровень инфраструктуры.

Каков правильный способ?

Обновление:

Вот мой код, который генерирует исключение на уровне приложения:

public void InsertNewImage(ImagemDTO imagemDTO)
{
    if (isValidContentType(imagemDTO.ImageStreamContentType))
    {
        string nameOfFile = String.Format("{0}{1}", Guid.NewGuid().ToString(), ContentTypeHelper.GetExtension(imagemDTO.ImageStreamContentType));

        string path = String.Format("{0}{1}", ImageSettings.PathToSave, nameOfFile);

        _fileService.SaveFile(imagemDTO.ImageStream, path);

        Imagem imagem = new Imagem()
                            {
                                Titulo = imagemDTO.Titulo,
                                Descricao = imagemDTO.Descricao,
                                NomeArquivo = nameOfFile
                            };

        _imagemRepository.Add(imagem);

        _dbContext.SaveChanges();
    } else
    {
        throw new WrongFileTypeException(String.Format("{0} is not allowed.", ContentTypeHelper.GetExtension(imagemDTO.ImageStreamContentType)));
    }
}

Даже ImageSettings является ConfigurationSection на моем уровне приложения, потому что он его использует. Я не вижу другого способа перенести мои ImageSettings (которые должны оставаться на уровне инфраструктуры) на уровень инфраструктуры, кто-нибудь может помочь?

public class ImageSettings : ConfigurationSection
{
    /// <summary>
    /// Caminha onde será salvo as imagens
    /// </summary>
    [ConfigurationProperty("pathToSave", IsRequired = true)]
    public string PathToSave
    {
        get { return (string)this["pathToSave"]; }
        set { this["pathToSave"] = value; }
    }

    /// <summary>
    /// Extensões permitidas pra upload
    /// </summary>
    [ConfigurationProperty("allowedExtensions", IsRequired = true)]
    public string AllowedExtensions
    {
        get { return (string)this["allowedExtensions"]; }
        set { this["allowedExtensions"] = value; }
    }

    /// <summary>
    /// Tamanho das imagens
    /// </summary>
    [ConfigurationProperty("imageSize")]
    public ImageSizeCollection ImageSize
    {
        get
        {
            return (ImageSizeCollection)this["imageSize"];
        }
    }
}
9
задан Acaz Souza 4 October 2011 в 13:49
поделиться