Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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
如何协调Javascript库中的干耦合和松耦合?_Javascript_Dry_Loose Coupling - Fatal编程技术网

如何协调Javascript库中的干耦合和松耦合?

如何协调Javascript库中的干耦合和松耦合?,javascript,dry,loose-coupling,Javascript,Dry,Loose Coupling,我正在建立自己的JS库 我们的想法是,该库应该由小型独立模块和一些稍大的实用程序组成,主要用于消除浏览器差异。 我做任何事情都有困难,因为我无法决定是保持干燥还是松散耦合 举个例子?鉴于: 一个小型库,负责从模板生成dom元素 另一个解决duck类型问题的方法(是函数,是数组…) 最后一个用于创建模态框。最后一项需要: 一些类型检查 将仅使用模板库中的一个函数创建模态 模式框库的我的选项: 100%干燥,取决于其他两个库。但是这意味着如果你是一个只想下载模态盒库的用户,你就必须使用另外两

我正在建立自己的JS库
我们的想法是,该库应该由小型独立模块和一些稍大的实用程序组成,主要用于消除浏览器差异。
我做任何事情都有困难,因为我无法决定是保持干燥还是松散耦合

举个例子?鉴于:

  • 一个小型库,负责从模板生成dom元素
  • 另一个解决duck类型问题的方法(是函数,是数组…)
  • 最后一个用于创建模态框。最后一项需要:
    • 一些类型检查
    • 将仅使用模板库中的一个函数创建模态
模式框库的我的选项:

  • 100%干燥,取决于其他两个库。但是这意味着如果你是一个只想下载模态盒库的用户,你就必须使用另外两个
  • 允许用户在启动时传递选项对象,允许用户指定所需的功能;默认为库中的库。这更好,但在实践中,这仍然意味着,在90%的情况下,使用提供的库,因为创建具有相同签名的函数可能会很麻烦。此外,它还增加了模态盒代码的复杂性
  • 100%松散,并复制我的模态盒库中所需的函数;可能更有效,因为更有针对性,无需检查边缘情况;但是:任何bug都必须在两个地方修复,并且我的下载量会增加
  • 因此,我在两个极端之间浪费时间,进行了一百万次重构,却从未感到满意。
    我本来想问一个更一般的问题,但后来我意识到它实际上是关于JS的,因为它涉及到大小和性能以及广泛的使用

    在这种情况下,是否有任何已知的模式可以遵循?公认的做法是什么?欢迎有任何想法

    [编辑:
    这是我发现的解释我的担忧的方法。正如文章所说

    干是重要的,但[…]低耦合和高内聚也是重要的。[…]你必须考虑所有的[原则],并权衡它们在每种情况下的相对价值


    我想在这种情况下我无法衡量它们的价值。

    我喜欢干燥的概念,但你的权利它有几个问题

  • 您的最终用户开发人员需要知道他们需要下载组件的依赖项

  • 您的最终用户开发人员需要知道他们需要配置依赖项(即要传递的选项)

  • 帮助解决1。您的项目网站可以动态定制下载,因此核心代码与可选组件一起下载。像这样

    帮助解决2。与其允许用户传入选项,不如使用合理的默认值来检测包的哪些部分已加载到浏览器中,并自动将它们绑定起来。 如果用户已经安装了第三方框架,这种松耦合还可以给您带来很大的优势,也可以依赖第三方框架。例如,允许您根据浏览器已加载的内容使用jquery或dojo等

    也许您可以使用它来帮助解决依赖关系管理问题。我得到的印象是,它并不真正意味着库可以直接使用,而是最终用户开发人员。。。但它可能是一个很好的适合


    我意识到我的答案并不能直接回答你的问题,但也许它可以帮助你平衡DRY的一些负面影响。

    我喜欢DRY的概念,但你的权利它有几个问题

  • 您的最终用户开发人员需要知道他们需要下载组件的依赖项

  • 您的最终用户开发人员需要知道他们需要配置依赖项(即要传递的选项)

  • 帮助解决1。您的项目网站可以动态定制下载,因此核心代码与可选组件一起下载。像这样

    帮助解决2。与其允许用户传入选项,不如使用合理的默认值来检测包的哪些部分已加载到浏览器中,并自动将它们绑定起来。 如果用户已经安装了第三方框架,这种松耦合还可以给您带来很大的优势,也可以依赖第三方框架。例如,允许您根据浏览器已加载的内容使用jquery或dojo等

    也许您可以使用它来帮助解决依赖关系管理问题。我得到的印象是,它并不真正意味着库可以直接使用,而是最终用户开发人员。。。但它可能是一个很好的适合


    我意识到我的答案并不能直接回答您的问题,但也许它可以帮助您平衡DRY的一些负面观点。

    就我个人而言,我一直认为应该在代码中创建接缝。在Java等经典语言中,这是通过创建隐藏具体实现的接口来实现的。这是一个强大的概念,因为它允许开发人员在您的应用程序中“拆开接缝”,并用模拟和双重测试(或者他们自己的实现)替换具体的实现。由于JavaScript是一种动态语言,开发人员依赖duck类型而不是接口:因为没有任何东西是冻结的,所以每个对象都成为代码中的一个接缝,可以被替换

    在直接回答您的问题时,我认为始终将代码分解和模块化为更小的库是值得的。您不仅可以避免重复代码(出于许多原因,这不是一个好主意),还可以鼓励其他只想重用库的一部分的开发人员重用代码

    与其重新发明轮子,为什么不利用一些更流行的JavaScript库呢