MVC - 最佳模式(UoW + 存储库 + 服务 + DI)
MVC - Best pattern (UoW + Repositories + Services + DI)
做mvc有一段时间了,但是第一次接触DI
我用 Ninject 开始了一个新项目,它看起来非常简单易懂,但是我看到的几乎每个教程都有 UoW、存储库和服务。
我的理解是:
- 存储库 - 与 EF 交互的抽象层/MongoDB/XML/任何可能是数据库(CRUD 操作)
- UoW - 一组相互关联的操作,它可能使用 N 个存储库来执行将在 [=25] 中使用的任务=]控制器
- Services 我真的不明白这一点,似乎只是多了一步,因为它使用了多个 UoW's执行 "more tasks"?我迷失在这个里面。
好的,我花了一些时间 "eat" Repository 这件事,因为我更喜欢通过 EF Context 槽UoW。
如果我忘记存储库而只使用上下文可以吗?还是用于任何 Unit Test
任务?
服务的用途是什么?
因为我可能会在 UoW 中执行每个 actions/tasks,然后在控制器中调用它。
有没有更好的模式集可以使用?
EFs DBContext 已经实现了 UoW 和 Repository 模式,因此您无法在自己的代码中再次实现这些模式。
服务是一种抽象业务逻辑的方式,因此可以重复使用
由于这些很常见,您可能正在谈论其中任何一个,所以我将对每个进行简要说明。
领域服务: 当您拥有一个实体并开始将逻辑推入其中时,您可能会遇到部分逻辑并不真正属于该实体的情况实体,所以你创建一个领域服务来抽象这个逻辑。一个例子是:
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();
}
...
}
应用程序服务:这些是您将从控制器调用的服务,用于封装特定任务所需的操作。假设您有一个控制器来接收友谊请求的批准或拒绝。您的应用程序服务应该收到足够的数据以便能够:
- 找到好友请求域实体
- 调用其批准或拒绝方法
- 调用方法将更改保存回数据库
- Return相关信息给控制器
基础设施服务:这些服务将抽象与业务无关但与应用程序如何工作相关的逻辑。一个例子是验证在您的请求中收到的安全令牌或执行日志记录活动的服务。
做mvc有一段时间了,但是第一次接触DI
我用 Ninject 开始了一个新项目,它看起来非常简单易懂,但是我看到的几乎每个教程都有 UoW、存储库和服务。
我的理解是:
- 存储库 - 与 EF 交互的抽象层/MongoDB/XML/任何可能是数据库(CRUD 操作)
- UoW - 一组相互关联的操作,它可能使用 N 个存储库来执行将在 [=25] 中使用的任务=]控制器
- Services 我真的不明白这一点,似乎只是多了一步,因为它使用了多个 UoW's执行 "more tasks"?我迷失在这个里面。
好的,我花了一些时间 "eat" Repository 这件事,因为我更喜欢通过 EF Context 槽UoW。
如果我忘记存储库而只使用上下文可以吗?还是用于任何 Unit Test
任务?
服务的用途是什么? 因为我可能会在 UoW 中执行每个 actions/tasks,然后在控制器中调用它。
有没有更好的模式集可以使用?
EFs DBContext 已经实现了 UoW 和 Repository 模式,因此您无法在自己的代码中再次实现这些模式。
服务是一种抽象业务逻辑的方式,因此可以重复使用
由于这些很常见,您可能正在谈论其中任何一个,所以我将对每个进行简要说明。
领域服务: 当您拥有一个实体并开始将逻辑推入其中时,您可能会遇到部分逻辑并不真正属于该实体的情况实体,所以你创建一个领域服务来抽象这个逻辑。一个例子是:
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();
}
...
}
应用程序服务:这些是您将从控制器调用的服务,用于封装特定任务所需的操作。假设您有一个控制器来接收友谊请求的批准或拒绝。您的应用程序服务应该收到足够的数据以便能够:
- 找到好友请求域实体
- 调用其批准或拒绝方法
- 调用方法将更改保存回数据库
- Return相关信息给控制器
基础设施服务:这些服务将抽象与业务无关但与应用程序如何工作相关的逻辑。一个例子是验证在您的请求中收到的安全令牌或执行日志记录活动的服务。