我正在构建自己的 JS 库;
这个想法是该库应该由小的独立模块和一些稍大的实用程序组成,主要用于消除浏览器的差异。
我无法完成任何事情,因为我无法在保持干燥或松散耦合之间做出决定。
一个例子?鉴于:
- 一个小型库,负责从模板生成 dom 元素
- 另一个处理鸭子类型问题(is_function,is_array ...)
- 最后一个创建模态框。最后一个需要:
- 一些类型检查
- 将仅使用模板库中的一个函数创建模态
我对模态框库的选择:
- 100% 干燥,并且依赖于另外两个库。但这意味着,如果您是只想下载模态框库的用户,则必须与另外两个
- 允许用户在启动时传递一个选项对象,以允许他们指定所需的功能;默认为库中的那些。这更好,但实际上,在 90% 的情况下,这仍然意味着使用提供的库,因为创建具有相同签名的函数可能很麻烦。此外,它增加了模态框代码的复杂性。
- 100% 松散,并重现我的模态框库中所需的功能;可能更有效,因为更有针对性,并且不需要检查边缘情况;但是:任何错误都必须在两个地方修复,并且我的下载大小会增加。
所以我浪费时间在两个极端之间摇摆不定,重构一百万次却从未满足。
我本来想问一个更通用的问题,但后来我意识到它确实与 JS 有关,因为它涉及到大小和性能问题以及广泛使用。
在这种情况下是否有任何已知的模式可以遵循?什么是公认的方式来解决这个问题?欢迎任何想法。
[编辑:]
这是我发现的唯一一篇说明我的担忧的文章。正如文章所说,
DRY 很重要,但 [...] 低耦合和高内聚也很重要。[...] 您必须考虑所有 [原则] 并权衡它们在每种情况下的相对价值
我想在这种情况下我无法衡量它们的价值。