Я не уверен в ваших конкретных требованиях, но кажется, что plain dll - это стандартная библиотека бизнес-логики.Исходя из моего опыта, я бы предложил оставить бизнес-логику как можно более независимой от реализации (в пределах разумного, конечно), поскольку в любом случае вы, скорее всего, будете обрабатывать исключения иначе.Разбрасывая различные исключения в зависимости от реализации, вы будете смешивать обязанности бизнес-логики с обязанностями разработчика.
Мое предложение состоит в том, чтобы выбросить общий набор исключений из библиотеки бизнес-логики, иловить / обрабатывать их по-разному для каждой реализации.Например, консольное приложение может просто запросить ввод снова, где приложение WCF может выдать исключение ошибки.
В качестве примера возьмем следующий код:
// Simple business logic that throws common exceptions
namespace BusinessLogicLibrary
{
public class Math
{
public static int Divide(int dividend, int divisor)
{
if (divisor == 0)
throw new DivideByZeroException();
return dividend / divisor;
}
}
}
// WCF calls to business logic and handles the exception differently
namespace WcfProject
{
[ServiceContract]
public interface IService
{
[OperationContract]
int Divide(int dividend, int divisor);
}
public class Service : IService
{
public int Divide(int dividend, int divisor)
{
try
{
return BusinessLogicLibrary.Math.Divide(dividend, divisor);
}
catch (Exception ex)
{
throw new FaultException(
new FaultReason(ex.Message),
new FaultCode("Division Error"));
}
}
}
}
// Console application calls library directly and handles the exception differently
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
ShowDivide();
}
static void ShowDivide()
{
try
{
Console.WriteLine("Enter the dividend: ");
int dividend = int.Parse(Console.ReadLine());
Console.WriteLine("Enter the divisor: ");
int divisor = int.Parse(Console.ReadLine());
int result = BusinessLogicLibrary.Math.Divide(dividend, divisor);
Console.WriteLine("Result: {0}", result);
}
catch (DivideByZeroException)
{
// error occurred but we can ask the user again
Console.WriteLine("Cannot divide by zero. Please retry.");
ShowDivide();
}
}
}
}