首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要把代码放在“干净”的后面,在XAML中做所有的事情呢?

为什么要把代码放在“干净”的后面,在XAML中做所有的事情呢?
EN

Stack Overflow用户
提问于 2010-10-07 04:13:56
回答 6查看 3.1K关注 0票数 17

保持代码“干净”的好处是什么?

很多时候,我在这里看到有人试图在XAML中做类似的事情,而不是后面的代码。他们唯一的理由是他们想要保持代码后面的‘干净’。如果我错了,请纠正我,但事实并非如此:

  • XAML也被编译成BAML,然后在运行时必须被解析为代码。
  • XAML可能有更多的运行时错误,因为编译器在编译时不会从不正确的拼写中提取它们,这些bug也很难调试。
  • 已经有代码了--不管你喜欢还是不喜欢InitializeComponent(); 必须运行,并且它所在的.g.i.cs文件包含一堆代码,尽管它可能是隐藏的。

纯粹是心理上的吗?我怀疑是来自web背景的开发人员喜欢标记,而不是代码。

编辑:我不建议后面的代码,而不是XAML --两者都用--我也喜欢用XAML进行绑定--我只是反对尽一切努力避免在WPF应用程序(特别是在WPF应用程序中)后面编写代码--这应该是两者的融合,以最大限度地利用它们。

EN

回答 6

Stack Overflow用户

发布于 2010-10-07 07:16:48

1.设计器透视图

UI通常是由设计师使用设计工具(表达式、混合和朋友)构建的。如果我有这样的工作,如果你在代码背后放了大量的UI相关代码,它就不能工作。至少这是我们的经历。它定义的代码和行为/功能对于设计人员来说是不可接受的:

  • 在大多数情况下,代码只在运行时执行,而不是在设计时执行。所以设计师在设计的时候没有看到整个故事。
  • 设计人员不是程序员,只有有限的(如果有的话)编程技能,所以他们很可能无法完善在那里定义的UI行为。

此外,我们已经体验到很难找到一种方法来为设计人员提供模拟的设计时数据(d:DesignInstance, d:DesignData, d:DataContext),如果有代码隐藏的话。

2.开发人员透视图

代码隐藏中与UI相关的代码(我在这里假设没有必要讨论将域逻辑放在代码背后的概率)是不可重用的代码。代码将永远绑定到特定的UserControl/Window/Page。例如,如果我要编写一个定制的附加财产行为,我就会感到满意,因为他们也可以使用它。

我输入的所有代码都是很难测试的代码。当然,仅仅将其放在XAML或自定义附加属性中并不会使它变得更容易。但是,取决于我在代码背后的功能类型,在某些情况下,我可以将它封装在可测试(可重用)类中。

在XAML中定义外观和行为往往比在代码中更容易出现,而不是(相对于发问者参数)。我只是不能像在代码中那样在XAML中犯尽可能多的错误。如果我做错了什么,很有可能我马上就会在设计师/视觉工作室看到它。当然,这些工具在这里仍然可以改进。事实上,如果我另外使用ReSharper,那么提问者提到的那些“不正确的拼写”在XAML中几乎是不可能做到的。我马上就能看到那个代码的高亮。我相信标准的工具会发现这一点。XAML是在WPF中定义UI的首选方法,microsoft已经做出了更大的努力,以确保它按照预期工作,而不是使用代码。事实上,我已经花费了相当长的时间来调试内存泄漏和运行时异常,这些代码做了与UI相关的工作,并且可以转移到XAML,很少或根本不需要付出额外的努力。

如果我放松了禁欲背后的代码,那么我编写杂乱无章和糟糕代码的风险就会更高。有时候,在代码背后放置一个快速的黑客是很诱人的。我们遭受了不止一次的后果。

使用代码隐藏很少是真正必要的。一旦您习惯了ViewModel驱动的UI,那么代码隐藏就永远不是一个合理的必要。把它放到别的地方不需要太多的努力。那为什么要费心呢?

票数 9
EN

Stack Overflow用户

发布于 2010-10-07 04:49:32

我认为这与

  • 可测试性-它源于将视图保持为瘦的想法,ala,用于构建GUI的ModelViewController / MVP / MVVM模式。这样,视图只有绑定到后台演示程序类的控件,这样就可以轻松地进行测试,而不必涉及GUI。你可以通过测试来达到显著程度的自信。它也比通过UI进行测试要快得多。
  • 与命令式编程相比,转向声明式编程- XAML是声明式编程。您不需要测试XAML标记。而且,MS代码或多或少地保证了工作并保持工作状态。因此,您可以非常肯定的是,initializeComponent不会中断您刚刚完成的签入。因此,从理论上讲,如果您的代码背后没有自定义/手写逻辑,您就可以在不测试视图的情况下过日子。
票数 6
EN

Stack Overflow用户

发布于 2010-10-07 04:21:28

您应该保持所有代码的整洁,并且将工作从后面的代码移到XAML并不是保持它的干净--它只是移动到它所在的位置。您应该将代码( XAML是代码的一种形式)放在最有意义的地方,同时尽可能地遵循OOD原则。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3878610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档