Model view controller 在MVC体系结构中实现服务层

Model view controller 在MVC体系结构中实现服务层,model-view-controller,service,layer,Model View Controller,Service,Layer,人们通常如何在MVC体系结构中实现服务层?它是一个向底层业务对象提供所有请求的对象吗?或者更像是为不同的服务对象服务的对象,而这些服务对象又与业务对象交互 因此: 控制器->服务->getUserById(),或: 控制器->服务管理器->getUserService()->getUserById() 另外,如果后者更合适,您会在引导中配置此ServiceManager对象吗?换句话说,在引导中向service manager注册应用程序需要的不同服务 如果以上这些都不合适,那么什么可以帮助我更

人们通常如何在MVC体系结构中实现服务层?它是一个向底层业务对象提供所有请求的对象吗?或者更像是为不同的服务对象服务的对象,而这些服务对象又与业务对象交互

因此:

  • 控制器->服务->getUserById(),或:

  • 控制器->服务管理器->getUserService()->getUserById()

  • 另外,如果后者更合适,您会在引导中配置此ServiceManager对象吗?换句话说,在引导中向service manager注册应用程序需要的不同服务

    如果以上这些都不合适,那么什么可以帮助我更好地理解服务层应该如何实现

    提前谢谢。

    我个人更喜欢#2,是的,它通常会在引导中配置,或者使用某种IoC容器来解决依赖关系,以提供实际的具体实例


    我还想评论一下,是的,我理解这可能更多的是个人偏好。尽量避免为这些对象使用名称“服务”层。将它们称为存储库或其他东西。如果您使用服务,则该术语会过载。。。因为开发人员会问,“你是说rest还是wcf服务?”。相信我,我们在最近的一个项目中做到了这一点,当我们谈论在何处进行代码更改时,我们总是感到困惑:-P

    按照我阅读这个问题的方式,有两件事需要回答:

    A) 我更喜欢将“服务”分为“CustomerService”和“OrderService”,换句话说,按域概念分组

    B) 其次,我将使用依赖注入直接在需要的地方获得适当的服务,所以我基本上使用alt1。备选方案2中添加的抽象对我来说没有额外的价值,因为IoC容器起着重要的作用。

    使用“facade”是一种方法:


    Joel,谢谢您的回复。我同意你对命名it服务的反对意见。我刚刚意识到了这一点,但实际上我自己也有点不高兴。但是图层的概念吸引了我。我现在也在尝试理解依赖注入的整个概念,但我并不完全清楚它是如何工作的。你能举一个简单的例子说明这在MVC环境中是如何工作的吗?我的意思是,如果说到检索用户对象,你会在哪里注入what-in-wich对象?我很难理解这个概念。先谢谢你。相信我,当我说我理解你说你试图绕着国际奥委会转的时候。我花了一点时间才弄清楚何时/何处使用它:-)这个评论框太小,无法真正进入它,但我建议查看ninject lib()。他们的教程一步一步地介绍这些概念。总而言之,这都是关于将API从具体实现中分离出来的。mvc项目中的代码应该针对您的API而不是您的特定实现。。。。按照Martin Fowler的说法,服务层“定义了应用程序的边界,服务层建立了一组可用的操作”,这些操作通常是粗糙的,但并不总是如此。所以我不认为服务层=存储库。一个真正的服务层(我喜欢)如何融入MVC对我来说仍然是个谜。我的直觉是MVC中的M应该替换为S。除非控制器构成我所说的服务层?我想大多数人都是这样做的。但是控制器应该定义应用程序边界吗?我很困惑…可能有多个边界。我想这就是你感到困惑的地方。MVC应该只关注特定应用程序需要做什么。因此,我们可以看到一个模型与服务层对话的架构(正如您所提到的,它可能是CRUD)。关于你的回答:A)理解并同意B)我明白你对冗余抽象的看法。但正如我对Joel所说的:我很难理解IoC在MVC环境中是如何实现的。这将在哪里发生?在控制器中?这有什么传统价值?我认为我对国际奥委会的原则理解得不太透彻,无法把握它的好处。或者我们也在讨论在引导中配置它?如果您想详细说明(可能有一个简单的例子),我将非常感谢。谢谢。了解依赖注入的关键概念是,为了有效,它将在大多数地方使用。通常,你把IoC容器挂在一个非常低的基础设施层次上,它只会渗透到任何地方。