gpt4 book ai didi

asp.net-mvc - 存储库中的复杂业务逻辑

转载 作者:行者123 更新时间:2023-12-03 16:08:58 25 4
gpt4 key购买 nike

我在具有非常复杂的业务逻辑的存储库中有一个方法。我刚刚读到存储库中不应该有业务逻辑。

从此方法中删除业务逻辑将需要我在其他两个存储库之间分配逻辑(因为它涉及其他两个实体)。

那么我的问题是——我应该使用什么模式来实现这个复杂的逻辑?它将需要使用这三个存储库,但我不能将它放在 Controller 中,因为我需要重用它。感谢您的帮助。

最佳答案

复杂的业务逻辑通常进入服务层。一项服务可能依赖一个或多个存储库来对您的模型执行 CRUD 操作。因此,代表一个业务操作的单个服务操作可能依赖于多个简单操作。然后你可以在你的 Controller 和其他应用程序中重用这个服务层。

显然,您的服务不应该依赖于特定的存储库实现。为了在服务层和存储库之间提供较弱的耦合,您可以使用接口(interface)。这是一个例子:

public interface IProductsRepository { }
public interface IOrdersRepository { }
...

public interface ISomeService
{
void SomeBusinessOperation();
}

public class SomeServiceImpl: ISomeService
{
private readonly IProductsRepository _productsRepository;
private readonly IOrdersRepository _ordersRepository;

public SomeServiceImpl(
IProductsRepository productsRepository,
IOrdersRepository ordersRepository
)
{
_productsRepository = productsRepository;
_ordersRepository = ordersRepository;
}

public void SomeBusinessOperation()
{
// TODO: use the repositories to implement the business operation
}
}

现在剩下的就是配置您的 DI 框架以将此特定服务注入(inject)您的 Controller 。
public class FooController : Controller
{
private readonly ISomeService _service;
public FooController(ISomeService service)
{
_service = service;
}

public ActionResult Index()
{
// TODO: Use the business operation here.
}
}

您可以看到接口(interface)如何允许我们在层之间提供弱耦合。所有的管道都由 DI 框架执行,一切都是透明的并且易于单元测试。

关于asp.net-mvc - 存储库中的复杂业务逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4474513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com