Code behind 无法维护的代码隐藏到非技术性

Code behind 无法维护的代码隐藏到非技术性,code-behind,Code Behind,您如何向非技术人员解释为什么在onclick事件后面编写代码(业务逻辑)是一种糟糕的做法,并导致无法维护的代码 编辑: 我必须向管理层解释为什么需要一些重构,以及为什么有些代码没有通过代码审查。对一些管理层来说,这只意味着更多的资金。我提出这个例子是因为在一次讨论中,有人说:……把代码放在按钮后面,忘记所有模型视图控制器的宣传,你会更快地完成任务。我通常不把代码放在onclick事件后面的原因是因为我经常重复代码,并且希望所有这些类型的onclick事件调用相同的例程。至少在这些术语中,您不会成

您如何向非技术人员解释为什么在onclick事件后面编写代码(业务逻辑)是一种糟糕的做法,并导致无法维护的代码

编辑:
我必须向管理层解释为什么需要一些重构,以及为什么有些代码没有通过代码审查。对一些管理层来说,这只意味着更多的资金。我提出这个例子是因为在一次讨论中,有人说:……把代码放在按钮后面,忘记所有模型视图控制器的宣传,你会更快地完成任务。

我通常不把代码放在onclick事件后面的原因是因为我经常重复代码,并且希望所有这些类型的onclick事件调用相同的例程。

至少在这些术语中,您不会成功地向非技术人员解释这一点。这一点太技术化了


如果你稍微概括一下,或者试着解释一些类似于关注点分离(不是用那些术语)的事情,你可能会更幸运一点

为什么非技术人员需要知道这一点?由于“代码风格”实际上是一个技术问题,如果不解释它背后的一些技术细节,您将无法解释它

可能是我能想到的最简单的解释(但这并没有涵盖所有认为这是不好的做法的原因,我认为这是最常见的原因):

在编写软件时,您努力使其尽可能可维护,这意味着能够快速调整应用程序以适应不断变化的用户/客户机/管理需求。每当GUI需求改变时,onClick事件背后的代码就会改变;每当业务需求改变时,业务逻辑代码就会改变。通过使其中一个独立于另一个,当这些事情中的任何一个发生变化时,所要做的工作都会减少。此外,在更新业务逻辑时,您将不需要担心它与GUI的关系,而在更新GUI时,您将不需要担心业务逻辑实际如何工作


另一个主要原因是可重用性。带有所有按钮的GUI实际上只是底层数据的“视图”或该数据的接口。您可能有多种访问/更改相同信息的方法,复制业务逻辑是多余的。如果业务逻辑发生变化,这也会增加复杂性,因为您必须在多个位置进行更改。

因为您不会将门铃直接连接到释放蜂鸣器。

带有图片和故事:)

不要太油嘴滑舌,而是在白板上构建一个场景,其中有一个简单的业务功能(更改用户密码)。用图形说明它的外观。现在展开它,以便2个表单需要更改用户密码(管理员和用户)双代码!干巴巴的解释。更改密码复杂性规则,现在需要双重修复。重构框以将代码移动到同一项目中的公共区域

现在,在其他应用程序需要执行相同操作的地方再次展开它。现在类库更好了。诚实地谈论复杂性的增加与可维护性和恢复性的对比


冲洗和重复,直到它下沉

这实际上是指分离业务层(如何处理事物)和表示层(如何显示事物)


两者的变化率和变化原因通常非常不同。您需要足够灵活地更改它们,以尽可能轻松地响应不断变化的业务需求,同时降低风险(回归)。

我将这样解释:

编写onclick事件背后的代码和编写分层或分层的应用程序之间的区别,就像中世纪城镇和现代城市之间的区别一样

在一个中世纪城镇,每个人都在耕田,每个人都在缝制衣服,建造房子,尽自己最大的能力教育孩子,没有人真正擅长于做好一项任务,他们必须完成生存所需的所有任务。 这就是在onclick事件后面编写代码的方式,代码必须完成所有工作,处理UI交互,进行业务验证,处理数据库访问,这在每个事件中都会重复

在一个现代化的城市中有农民大规模从事农业并从事农业专业化,有裁缝可以为每个人缝制更好的衣服,因为他们有更丰富的经验和专业化,有建筑工人,有些老师在学校里教孩子,他们可以做得更好,因为他们有更多的时间来做。这就是编写分层应用程序的方式,UI层只负责处理用户请求和更新用户界面,因此更易于更改、替换或扩展,无需额外的代码负担;业务层负责业务逻辑,所有逻辑都是集中的、可重用的,业务逻辑代码更加紧凑和干净,数据访问层处理数据库交互,并专门处理可能与多种类型的数据库交互的操作


在onclick事件后面编写代码是一种基本的编程风格,它不是最有效的风格,从长远来看也不会产生最好的结果,尽管结果通常是可以接受的(应用程序可以工作),但它可以工作得更好,更容易维护和扩展,并且更一致(关于用户界面、交互、错误报告、工作流程等)使用适当的分层设计,采用良好的编码实践。

我必须像其他人一样询问-为什么

对于非技术人员来说,重要的是,当单击按钮时,所需的行为正在发生。从他们的角度来看,您正在对单击事件进行编码

但如果真是这样