gpt4 book ai didi

.net - 在 DDD 中,在哪里保存自定义异常(应用程序异常)?在基础设施层?

转载 作者:行者123 更新时间:2023-12-04 04:35:49 24 4
gpt4 key购买 nike

我正在构建一个具有以下架构的应用程序:

UI - 应用程序 - 领域 - 基础设施

我有一个需要使用自定义异常的应用程序层。我在哪里保存这些自定义异常?在基础设施层?问题是我的应用程序层没有引用基础设施层。

什么是正确的方法?

更新:

这是我在应用程序层抛出异常的代码:

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"];
}
}
}

最佳答案

这很可能与您的 previous question 有关.异常是由应用层定义并由基础设施实现的契约的一部分( DIPOnion architecture )。它们应该在应用程序术语中定义并由应用程序处理,但从基础设施中抛出。例如,在您的应用程序代码中:

public class NotificationException : Exception {...}

public interface ICanNotifyUserOfSuccessfullRegistration {
/// <summary>
/// ...
/// </summary>
/// <exception cref="NotificationException"></exception>
void Notify();
}

在基础设施方面:
public class SmsNotificator : ICanNotifyUserOfSuccessfullRegistration {
public void Notify() {
try {
// try sending SMS here
} catch(SmsRelatedException smsException) {
throw new NotificationException(
"Unable to send SMS notification.", smsException);
}
}
}

关于.net - 在 DDD 中,在哪里保存自定义异常(应用程序异常)?在基础设施层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7634787/

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