asp.net MVC - MVC - 最佳模式(UoW + 存储库 + 服务 + DI)



我已经做了一段时间的mvc,但这是我第一次接触DI。

用Ninject开始了一个新项目,它看起来非常简单易懂,但是我看到的几乎每个教程都有UoW,存储库和服务。

我的理解是:

  • 存储库 - 用于与EF/MongoDB/XML/任何可能是数据库的交互的抽象层(CRUD操作)
  • UoW - 关联在一起的操作集,它可以使用 N 个存储库来执行将在控制器中使用的任务
  • 服务 我真的不明白这一点,它似乎只是多一步,因为它使用多个 UoW 来执行"更多任务"?我迷失在这一点上。

好的,我花了一些时间来"吃"存储库的东西,因为我更喜欢通过 UoW 传递 EF 上下文

如果我忘记了存储库而只使用上下文可以吗?还是用于任何Unit Test任务?

服务的用途是什么?因为我可以在 UoW 内执行每个动作/任务,然后在控制器中调用它。

有没有更好的模式集可以使用?

由于这些非常常见,并且您可能正在谈论其中任何一个,因此我将对每个进行简要解释。

域服务

:当您有一个实体并开始将逻辑推送到其中时,您可能会达到逻辑的一部分实际上不属于该实体的地步,因此您创建一个域服务来抽象出此逻辑。一个例子是:

public class Shipment
{
    ...
    public void CalculateFee(IFeeCalculatorService feeCalculatorService)
    {
        ... Any additional and entity relevant logic for fee calculation can be here as well.
        this.Fee = feeCalculatorService.Calculate();
    }
    ...
}

应用程序服务:这些是您将从控制器调用的服务,用于封装特定任务所需的操作。假设您有一个控制器来接收友谊请求批准或拒绝。应用程序服务应接收足够的数据,以便能够:

  • 查找友谊请求域实体
  • 调用其批准或拒绝方法
  • 调用方法以将该更改保留回数据库
  • 将相关信息返回给控制器

基础结构服务:这些服务将抽象出与业务无关但与应用程序的工作方式相关的逻辑。例如,用于验证在请求中收到的安全令牌或执行日志记录活动的服务。

EFs DBContext已经实现了UoW和Repository模式,因此yiu在yiur自己的代码中再次实现它们没有任何好处。

服务是一种抽象业务逻辑以便可以重用的方法

最新更新