与MVC的宁静服务层

时间:2015-10-12 05:56:35

标签: c# asp.net-mvc rest architecture asp.net-web-api

我需要一个关于创建架构的建议,我想在UI层和业务层之间使用API​​层。 UI层应该只使用休息服务来显示数据。

这样做的原因是我们需要为其他客户端(如Ipad,Android等)公开相同的服务。

现在我的问题是: -

1)在这种情况下我们是否需要依赖注射? (我不这么认为,因为我们不会在UI层使用任何引用。唯一的问题是,我们正在通过服务来操作返回的JSON。)

2)会不会影响表现?

3)这是正确的做法吗?

任何帮助将不胜感激。感谢

3 个答案:

答案 0 :(得分:1)

我为我创建API的方式是:

  • 项目1:WebAPI作为获取数据的门户
  • 项目2:类库,为WebAPI层提供服务。
  • 项目3:类库,使用EF为我的服务层提供数据。

现在,web api项目中的不同控制器需要不同的服务对象(来自项目2)才能使用。我不得不为那些使用DI的控制器提供构造函数。为此,我使用了Autofac。

对您而言,您的业务层将是项目2。

流经另一个Project层的数据可能需要一些时间,您需要在API层中再次进行异常处理和日志记录。我不认为表演在这里应该是个大问题。

答案 1 :(得分:1)

根据我的经验,我见过这种面向平台的方法 - 向 N 客户提供mSOA。体系结构解决方案是Facade,它隐藏了所有复杂的业务层请求,同时提供了UI不敏感处理。

  

这会影响性能吗?

没有必要 - 因为它知道如何处理所有必需的子系统请求。所有客户都知道他们需要一个JSON合同来完成工作,而不是要调用哪个和多少个服务。通过这样做 - 我们有一个更好和简化的沟通。看一下Mediation (intra-communication)模式:

Mediator

答案 2 :(得分:1)

我们现在做的大致相同。

1)不,你不能。

2)不,twitter首先是api,他们似乎做得很好。我从技术上讲它会,但它确实意味着你可以水平扩展,这样可以很容易地抵消额外的跳跃开销。

3)您有多个ui客户端,因此它似乎是一个不错的可行解决方案。

安全 安全性:基本认证 它最容易设置,但请注意令牌是可逆的,因此使用HTTPS加密通信。 包含用户名和密码的HTTP Authorization标头随每个请求一起发送到api级别。

您可以使用会话但需要更多设置。

有很多关于在C#和web api中设置基本身份验证的方法。