Architecture 服务层函数的返回值

Architecture 服务层函数的返回值,architecture,Architecture,我正在开发一个应用程序,并在控制器和存储库之间使用“服务”层来执行模型/业务验证。由于这是一个多租户应用程序(带有共享数据库),我需要对所有操作执行权限验证 有一件事我不确定如何处理,那就是在用户无法访问特定操作的情况下返回类型。例如,假设我有一个方法GetAccountById。通常,此方法将返回帐户实体的实例(如果不存在则返回null)。如果帐户确实存在,但当前用户没有访问权限,那么适当的返回值是多少?我真的不想抛出异常,因为它似乎不是一个很好的用途。因此,问题是:如何提醒我的服务层(无论是

我正在开发一个应用程序,并在控制器和存储库之间使用“服务”层来执行模型/业务验证。由于这是一个多租户应用程序(带有共享数据库),我需要对所有操作执行权限验证

有一件事我不确定如何处理,那就是在用户无法访问特定操作的情况下返回类型。例如,假设我有一个方法
GetAccountById
。通常,此方法将返回
帐户
实体的实例(如果不存在则返回
null
)。如果帐户确实存在,但当前用户没有访问权限,那么适当的返回值是多少?我真的不想抛出异常,因为它似乎不是一个很好的用途。因此,问题是:如何提醒我的服务层(无论是控制器还是web服务)的使用者授权无效?我是否应该创建某种类型的
GetAccountByIdResult
类型,并在其中包含函数的结果(包括任何“错误”代码、实际实体等)


谢谢,

是的,我在服务层所做的实际上总是包括一个“result”对象,其中包含一个错误bool,一个错误消息的集合(如果
error
为true,您可以读取这些消息)。。。然后是实际的对象/资源

{
  error:true,
  messages: ['error1','error2'],
  value: { name:'blah' }
}

记住我从来没有真正做过这件事(我记得)。。。 我想这取决于你在哪里执行授权

  • 如果您在服务级别强制执行它,那么您将在那里定义它;我想您可能会有一个通用的“故障”响应和/或特定服务的特定响应
  • 如果您在存储库级别强制执行它,那么它将返回它想要的任何内容,而您的服务层将必须处理该问题并确定返回的内容—这让我们回到了第一点

根据方法,您有一个或多个通用“结果”对象吗?这取决于所涉及的技术。。。我通常尝试使用通用的结果对象。从javascript访问rest/json服务时,由于json是动态类型化的,因此非常容易。如果客户机是静态类型的语言(java、c#等),那么我要么使用带有“object”值的通用语言,要么使用强类型语言(如果情况需要)。通常,如果我是客户机的作者,我会使用object,因为我可以很容易地转换结果。然而,如果我为其他消费者写作,我通常会大力打字