【问题标题】:DRY principles between frontend and backend前端和后端之间的 DRY 原则
【发布时间】:2015-06-19 12:57:00
【问题描述】:

在我的编程实践中,我经常遇到客户端脚本和服务器端脚本之间数据重复的问题。 在这种情况下,我们可以讨论客户端的 JavaScript 和服务器端的 PHP 或 C# (ASP.NET)。

假设我有一个 JavaScript 代码,它定义了一个带有特定数据的常量(或数组或对象)。例如。它可以是引用应用业务规则的数据。这些数据也应该在后端使用,我必须在适当的脚本中定义这个常量。

而在这一刻,当我们定义第二个变量时,我们违反了“不要重复自己”的原则。现在,当我在前端更改此常量时,我​​也必须在后端更改此常量。

而且以这种方式耦合的数据量会增长,我的代码将来会很难维护。

那么,接下来我的问题是:在客户端-服务器通信的上下文中是否有任何方法或良好实践来遵循 DRY 原则?例如,将此类数据保存在 .settings 文件中并在前端和后端读取它是一种好习惯吗?

【问题讨论】:

    标签: oop dry


    【解决方案1】:

    DRY 原则适用于逻辑中的重复,并不一定意味着在前端和烘焙端不使用相同的变量。如果这种情况适用,那么使用视图模型和 DTO 将违反 DRY 原则。您需要将您对 UI 的关注与其他层分开。你的 UI 可能会改变,但你的业务逻辑不应该散布在重复的代码中,这可能会使可维护性成为一场噩梦。查看 automapper 并了解对象映射的概念,这可能会消除您的困惑。

    【讨论】:

      【解决方案2】:

      根据维基百科,DRY 表示为

      每一条知识都必须有一个单一的、明确的、 系统内的权威表示

      因此你在不同层的重复知识,违反了 DRY。

      在很多地方都定义了这样的常量,以后可能会成为一个很大的问题。当您想要配置常量时,情况会更糟。幸运的是,您可以通过从服务器设置 javascript 变量来解决问题。

      例如在 php 中:

      var constants = <?php echo JSONConstants($constants); ?>;
      console.log(constants.companyName);
      

      您只需要确保脚本在加载任何 javascript 中的业务逻辑脚本之前执行。此外,您需要注意哪些常量(并以某种良好的结构构建)将传递给 javascript 以便于开发。

      【讨论】:

      • 谢谢!当我们通过 ID 引用 JavaScript 代码中的 html 元素时,您知道有什么方法可以避免重复吗?例如。 $("#someElementId") 引用某个元素。如果我决定在 HTML 中更改元素的 ID,那么我应该如何处理我的 JavaScript?查看我所有的代码并搜索每个“someElementId”来更改它?即使这个 ID 在 JavaScript 中只提到过一次,如果我们稍有不注意,我们也会遇到一些问题。这个问题困扰着我不少于主题问题:)
      • 你可以问另一个问题,因为答案很长
      猜你喜欢
      • 2014-02-09
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多