Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将SRP应用于用户界面类?_C#_Winforms_Dependency Injection_Single Responsibility Principle - Fatal编程技术网

C# 如何将SRP应用于用户界面类?

C# 如何将SRP应用于用户界面类?,c#,winforms,dependency-injection,single-responsibility-principle,C#,Winforms,Dependency Injection,Single Responsibility Principle,我的应用程序使用DI框架,并在必要时遵循“程序到接口”的实践 我使用构造函数注入,因为我希望显式地查看依赖项。但是现在我的表单类的构造函数接受了太多的参数(>=4,例如) 问题:由于UI设计通常不遵循SRP,Winform类可能具有n构造函数依赖关系。您想让它们保持原样吗,改为传递代理对象,使用服务定位器。。。?考虑到没有使用aop框架,您是否在每个构造函数中注入“方面”(记录器等)?UI实现没有理由不遵守SRP。使用MVP、MVC或MVVM等模式,UI类的单一职责是通过UI呈现和收集数据。这通

我的应用程序使用DI框架,并在必要时遵循“程序到接口”的实践

我使用构造函数注入,因为我希望显式地查看依赖项。但是现在我的表单类的构造函数接受了太多的参数(>=4,例如)


问题:由于UI设计通常不遵循SRP,Winform类可能具有
n
构造函数依赖关系。您想让它们保持原样吗,改为传递代理对象,使用服务定位器。。。?考虑到没有使用aop框架,您是否在每个构造函数中注入“方面”(记录器等)?

UI实现没有理由不遵守SRP。使用MVP、MVC或MVVM等模式,UI类的单一职责是通过UI呈现和收集数据。这通常最好通过相当被动的数据结构(如视图模型)来实现

关于构造函数过度注入的问题应通过以下方式解决


方面最好通过解决。

谢谢!两篇文章都很棒。不过,我想稍微打开“UI设计中的SRP”部分。您如何应对客户的非标准UI需求?例如,涉及多个职责的表单(根据您手头的设计)…我认为可能会使用复合视图,每个视图本身都使用SRP,或者可能会重新考虑职责的粒度(如在聚合服务中)。你会走哪条路?听起来很合理。每个问题都是一个较大问题集的一小部分。这基本上就是现在或多或少已经失效的复合应用程序块所走的道路。