服务层相互依赖

时间:2010-11-12 12:33:16

标签: asp.net-mvc

我正在设计一个使用服务层的asp.net mvc应用程序。如果我们的服务依赖于其他服务怎么办?例如,假设我们有以下模型:

class UserService : IUserService
{
    //implementation requires IEmailService
}    

当然,可以将具体实现EmailService注入到UserService的构造函数中,但在我的理解中,服务层应该在UI和Domain Model之间进行调解,它就像一个外观。我将以UserService依赖于IUserModule和IEmailModule的方式定义另一个层,这样我们就可以打破服务之间的依赖关系,服务依赖于较低层(在我的模块层中)。这是一种正确的方法吗?

3 个答案:

答案 0 :(得分:6)

在常见的DDD架构中,您将找到两种服务域服务(其实体之间的协调业务操作)和应用程序服务(其依赖于域服务,并包含与应用程序相关的任务,而不包含与业务逻辑相关的任务)例如,export to pdf是一个应用程序任务。应用折扣是一项业务逻辑任务。)

所以,如果你只有一种服务,我认为这包括两个职责。是完全有效的相互依赖。

alt text

答案 1 :(得分:1)

  

当然,可以将具体实现EmailService注入到构造函数中   UserService,但据我了解,服务层应该在UI和域之间进行调解   模型

嗯,这是双方之间的合同,不一定是UI和域模型,但通常是。

  它就像一个门面。

是的,优质的服务具有漂亮的外观,也是性能的一部分。

  通过这种方式,我们可以打破服务之间的依赖关系,服务依赖于服务   下层(在我的例子中是模块层)。这是一种正确的方法吗?

模块对您意味着什么? IEmailService是您的服务还是模块?在您的情况下为您的服务创建Facade似乎是正确的。但是,您提供的信息很少,关于您的系统,您的意图以及您的架构挑战/优先事项。

答案 2 :(得分:-4)

依赖注入是你应该避免的,因为它增加了灵活性幻觉的耦合和复杂性。在开始开发之前,MVC也需要重新考虑,因为除了执行CRUD操作的简单应用程序之外,它不仅仅是好事。 Web Forms是一个经过验证的平台,对于更多可用的应用程序更好。