I'm building a app with following architecture:
UI - Application - Domain - Infrastructure
I have a Application Layer that need use custom exceptions. Where I keep these custom exceptions? In Infrastructure layer? The problem is my Application Layer don't have reference to Infrastructure layer.
What is the correct way?
Update:
Here's my code that throw a exception in Application Layer:
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)));
}
}
Even ImageSettings is a ConfigurationSection is in my Application Layer because it uses it. I don't see other way I can transfer my ImageSettings (which should stay in Infrastrucuture Layer) to Infrastructure Layer, someone can help?
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"];
}
}
}
In DDD where to keep custom exceptions (application exceptions)? In Infrastructure layer?
Why?
I've written an article with Onion Architecture with a code sample. Please check this.
But basically, you should add your custom exception to your layer (Application in this case). Just create a folder "Exceptions" and then add your user-defined exception there. Please check this link for my details about how to create user-defined exceptions
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With