我正在使用控制器 - 服务 - 存储库层模式我是我的应用程序。存储库包含基本的 CRUD 操作和服务层所有业务逻辑,而控制器保持非常精简(它们只调用服务层函数)。
我想向用户发送消息(成功、警告等),但我不确定如何从服务层级别执行此操作?我已经使用 TempData 和基类查找了一些解决方案,但这些解决方案似乎只适用于控制器级别。
是否有一个很好的解决方案可以将用户通知从服务层推送到视图?
我正在使用控制器 - 服务 - 存储库层模式我是我的应用程序。存储库包含基本的 CRUD 操作和服务层所有业务逻辑,而控制器保持非常精简(它们只调用服务层函数)。
我想向用户发送消息(成功、警告等),但我不确定如何从服务层级别执行此操作?我已经使用 TempData 和基类查找了一些解决方案,但这些解决方案似乎只适用于控制器级别。
是否有一个很好的解决方案可以将用户通知从服务层推送到视图?
看起来您在应用程序架构中很好地分离了关注点。保持这种方式是非常明智的 - 不要让您的服务层了解有关 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
};
}
}
这只是一个示例。在现实世界中,您将采用不同的方法来比较类型的值double
使用这种模式,您不想直接从服务层与视图交互,因此您可以考虑在每次方法调用时将一些自定义数据传输对象返回给控制器。这些 DTO 可能包含任何错误消息或通知。然后控制器可以将此数据传递给视图。
一种方法可能是让您的服务方法返回布尔值以指示成功或失败。然后控制器将知道这一点并可以采取相应的行动。
另一种方法可能是方法返回一个自定义的“错误”对象,该对象包含有关服务中发生的事情的信息。