我正在使用控制器 - 服务 - 存储库层模式我是我的应用程序。存储库保存基本的CRUD操作,服务层包含所有业务逻辑,而控制器保持非常精简(它们只调用服务层功能)。
我想向用户发送消息(成功,警告等),但我不确定如何从服务层级别执行此操作?我已经使用TempData和基类查找了一些解决方案,但那些似乎只能在控制器级别上运行。
是否有一个很好的解决方案可以将用户通知从服务层推送到视图?
答案 0 :(得分:2)
您的应用架构中似乎有很好的关注点。保持这种方式是非常明智的 - 不要让你的服务层知道关于UI的任何信息。
我会做什么我会为服务层创建一些类作为执行结果返回。
public class ExecutionResult<T>
{
public T Result { get; set; }
public string Message { get; set; }
}
通过这种方式,您可以将Message
传递给ViewBag.UserNotification
,并在您的视图中将其显示出来:
修改:示例用法:
public class Math
{
public ExecutionResult<double> Divide(double number, double divideBy)
{
if (divideBy == 0)
{
return new ExecutionResult<double>
{
Result = double.NaN,
Message = "Division by zero is not possible"
};
}
return new ExecutionResult<double>
{
Result = number/divideBy
};
}
}
这只是一个样本。在现实世界中,您将在comparing values of type double
答案 1 :(得分:0)
使用这种模式,您不希望直接从服务层与视图交互,因此您可以考虑在每次方法调用时将一些自定义数据传输对象返回给控制器。这些DTO可能包含任何错误消息或通知。然后控制器可以将此数据传递给视图。
答案 2 :(得分:0)
一种方法可能是您的服务方法返回布尔值以指示成功或失败。然后控制器会知道这一点,并可以采取相应的行动。
另一种方法可能是方法返回自定义“错误”对象,该对象包含有关服务中发生的事情的信息。