Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# 是否应使用自定义控件来管理表单复杂性?_C# - Fatal编程技术网

C# 是否应使用自定义控件来管理表单复杂性?

C# 是否应使用自定义控件来管理表单复杂性?,c#,C#,一般来说,我想知道什么时候使用自定义控件,而不是将控件直接集成到表单中 特别是,我有一个表单,它包含一个选项卡页面,其中6个选项卡分别包含许多.net framework控件。目前,我在我的项目中有6个用户定义的控件,它们停靠在每个选项卡页面上。 也就是说,没有控件的重用,我只是使用它们来管理表单的复杂性,否则表单将包含10个GridView、20个按钮、6个日期控件等等。你会认为这是管理这种复杂性的好方法,还是其他方案更好? 了解发生了什么事?什么是复杂性?如果你问我,如果你使用usercon

一般来说,我想知道什么时候使用自定义控件,而不是将控件直接集成到表单中

特别是,我有一个表单,它包含一个选项卡页面,其中6个选项卡分别包含许多.net framework控件。目前,我在我的项目中有6个用户定义的控件,它们停靠在每个选项卡页面上。 也就是说,没有控件的重用,我只是使用它们来管理表单的复杂性,否则表单将包含10个GridView、20个按钮、6个日期控件等等。你会认为这是管理这种复杂性的好方法,还是其他方案更好?
了解发生了什么事?

什么是复杂性?如果你问我,如果你使用usercontrols作为你使用的方式,你会使它变得更复杂。应使用用户控件来防止代码重复。基本上,您正在做的是将您的逻辑移动到您的用户控件,并将您的逻辑划分为多个页面,这样您在主页上的代码就更少了。如果你问我,这不应该是你主要关心的问题。

什么是复杂性?如果你问我,如果你使用usercontrols作为你使用的方式,你会使它变得更复杂。应使用用户控件来防止代码重复。基本上,您正在做的是将您的逻辑移动到您的用户控件,并将您的逻辑划分为多个页面,这样您在主页上的代码就更少了。如果你问我的话,这不应该是你主要关心的问题。

我认为这种将页面划分为自定义/用户控件的方式可能会被证明是有用的,即使不重用这些部分。这将为您提供:

  • 封装—您可以对更高级别的代码隐藏枯燥的管道和脆弱的内部状态,从而在页面级别为您提供一组更干净的控件和更多面向业务的代码
  • 关注点分离-您可以制作简单但逻辑完整的片段
  • 准备好重用-可能永远不会变得有用,但它确实会让您感觉更强大;) 但是请注意,如果组件没有正确命名和分组、设计不好、使用大量动态加载、没有提供良好的API或嵌套太深,那么这可能会适得其反。我曾在一个遗留应用程序中看到过这种情况,但这样做毫无帮助


    如果做得好,值得。对于没有经验的/草率的团队成员,最好不要这样做。

    我认为这种将页面划分为自定义/用户控件的做法可能会被证明是有用的,即使不重用这些部分。这将为您提供:

  • 封装—您可以对更高级别的代码隐藏枯燥的管道和脆弱的内部状态,从而在页面级别为您提供一组更干净的控件和更多面向业务的代码
  • 关注点分离-您可以制作简单但逻辑完整的片段
  • 准备好重用-可能永远不会变得有用,但它确实会让您感觉更强大;) 但是请注意,如果组件没有正确命名和分组、设计不好、使用大量动态加载、没有提供良好的API或嵌套太深,那么这可能会适得其反。我曾在一个遗留应用程序中看到过这种情况,但这样做毫无帮助


    如果做得好,值得。对于经验不足/马虎的团队成员,最好不要这样做。

    如果您在视图模型或控制器中对屏幕的各个部分有复杂的逻辑,那么这可能是一种有益的方法。它使你的整体形式更像一个合成体。您可以单独开发视图模型和/或控制器中的节/控件后面的功能,并单独对其进行单元测试。正如ImreP所说,这是沿着关注点分离的路线进行的

    但是,如果表单上的单独控件之间存在大量交互,那么这可能不是正确的方法。如果您可以为表单的不同区域找到不同的行为/责任区域,那么拆分可能是一个好主意,因为您的前提是有很多UI发生

    如果这仅仅是为了在每个包中拥有更少的基本控件,并且没有机会重用任何组件,那么这可能会在某种程度上搅乱局面


    一个好的测试可能是向团队中的其他人展示它,并查看向他们解释它需要多长时间。通过尝试将其展示给还没有见过它的人,你会知道它是否直观。

    如果你在视图模型或控制器中对屏幕部分有复杂的逻辑,那么这是一种有益的方法。它使你的整体形式更像一个合成体。您可以单独开发视图模型和/或控制器中的节/控件后面的功能,并单独对其进行单元测试。正如ImreP所说,这是沿着关注点分离的路线进行的

    但是,如果表单上的单独控件之间存在大量交互,那么这可能不是正确的方法。如果您可以为表单的不同区域找到不同的行为/责任区域,那么拆分可能是一个好主意,因为您的前提是有很多UI发生

    如果这仅仅是为了在每个包中拥有更少的基本控件,并且没有机会重用任何组件,那么这可能会在某种程度上搅乱局面

    一个好的测试可能是向团队中的其他人展示它,并查看向他们解释它需要多长时间。你会得到一个好主意,如果它是直观的或不是通过尝试显示给别人谁还没有遇到它