C# 清洁体系结构-如何在MVC中实现演示者

C# 清洁体系结构-如何在MVC中实现演示者,c#,clean-architecture,C#,Clean Architecture,根据Bob叔叔的干净体系结构,用例交互者调用presenter的实际实现(在DIP之后注入)来处理响应/显示 如何使用C#(ASP.NET核心MVC)实现这一点 控制器是否应该注入一个C接口用例,该用例公开一个C接口回调?在clean architecture中,presenter和controller是不同的类。正如你已经描述的,演示者应该被注入到交互者中。演示者将交互者响应协调到视图模型中,然后将视图模型传递给视图 在asp.net MVC中,最后一步再次涉及到控制器,这并不是clean体系

根据Bob叔叔的干净体系结构,用例交互者调用presenter的实际实现(在DIP之后注入)来处理响应/显示

如何使用C#(ASP.NET核心MVC)实现这一点


控制器是否应该注入一个C接口用例,该用例公开一个C接口回调?

在clean architecture中,presenter和controller是不同的类。正如你已经描述的,演示者应该被注入到交互者中。演示者将交互者响应协调到视图模型中,然后将视图模型传递给视图

在asp.net MVC中,最后一步再次涉及到控制器,这并不是clean体系结构所期望的100%,但框架就是这样工作的。因此,在选择asp.NETMVC时,需要做出一个小小的妥协

关于这个问题的更多细节,请参考我在这里的帖子:
一些人对记录Bob叔叔描述的实体边界交互器(EBI)感兴趣。有一个更实用但(在写这篇文章时)尚未完成的面向程序员的文档,您可以找到。这一想法也是《面向对象软件工程用例驱动方法》(简称“实体接口控制器”)一书的一部分,该书由《代码》Ivar Jacobson撰写,Bob叔叔在至少一次演讲和一篇名为

bob叔叔自己做了一个演讲,解释了他认为web开发有什么问题,以及为什么他认为不同的模型会更好():

网络的复杂性和重要性;网络是一个 细节它不是我们应用程序的本质,它是一个IO通道。 为什么我们要围绕IO通道构建应用程序


他还就如何构造应用程序给出了建议。

请解释一下:控制器是否应该注入一个C接口用例,该用例公开一个C接口回调?什么是C#接口的用例?我当前的实现将一个交互器(又称用例)注入类和一个注入的presenter类,我在MVC控制器上的GET操作中调用交互器。交互程序的结果是对dto的响应。此dto将提供给注入的演示者,该演示者将其转换为viewmodel。viewmodel是从GET操作返回的。问题是您在这里使用了很多行话,例如interactor,因此很难理解您的想法。你能发布一些代码来显示你在做什么吗?我觉得这样的问题更适合@CodingYoshi这是专门针对“Bob叔叔的干净架构”的行话,所以不知道这是什么的人无论如何都无法回答问题,所以我认为没问题。演示者被注入控制器,没有进入互动者。。。我缺少的部分是如何实现用例和演示者之间的边界,这是否应该始终是一个C#接口?用例交互器提供了一个接口,即输出端口,由演示者实现。通过这个界面,演示者被注入到交互者(用例)中。请看一下我添加到答案中的链接。示例是F#中的,但通过图表,我相信你也可以理解只有C#背景的代码;我可以看到用例和UI之间的界限是使用C#接口(IxxxxResponse)完成的这些问题都是通过DI解决的,但我还没有掌握全部情况……在同一领域工作时,我认为主要问题是干净的体系结构与现有的web框架(如ASP.NETMVC)不太匹配,在ASP.NETMVC中,框架是用户输入和输出的驱动程序。如果我们想继续使用ASP.NETMVC,我们必须稍微调整一些东西,做出一些妥协。我使用MediatR从MVC控制器调用交互程序。我想我会将交互者的结果(再次使用中介)传递给构建视图模型的演示者。这并不完全是clean体系结构所建议的,而是一种折衷,因此我仍然可以使用普通MVC。@Marc:MediatR是应用CQR的一种很好的方法,您可以在其中以管道方式附加AOP