我们如何命名具有扩展JavaScript默认类功能的类的类(例如Array
)。
我是AlgoFlux Runtime的作者,这是一个提供数据结构,算法和处理类的小型库。这个库包含array
,object
,math
,colors
和其他很酷的东西的辅助模块。
我该如何命名?现在我使用以下约定:
MathH
ArrayH
ObjectH
H
暗示Helper类。现在看起来有点难看。
是的,我可以封装所有这些AlgoFlux.Arrays.unique()
。但是我想保持简短,如果JS支持using <class>
语句,就像在C#中一样,这将是一个好主意。
扩展内置类是一个坏主意。为此制作单独的模块是一个很好的设计决策。
对此问题的任何帮助将不胜感激。感谢。
答案 0 :(得分:0)
问题可能有点基于意见,但有一些选择:
目前:命名空间和/或AMD。最终:ES6's modules。
<强>名字空间:强>
是的,我可以封装所有这些
AlgoFlux.Arrays.unique()
。但我想保持简短...
嗯,你不需要复数(例如AlgoFlux.Array.unique
)。让您的用户担心短缺。例如,如果我想要,那么在我的代码中包含你的库后我可以这样做:
var A = AlgoFlux;
然后我使用A.Array.unique()
,它只比ArrayH.unique()
长一个字符。
......如果JS支持使用语句,那将是一个好主意,就像在C#中一样。
上面的var
声明很接近; ES6模块一直在那里。
<强> AMD 强>:
如果你支持AMD,那么与上面的命名空间一样,你的用户可以根据他们的代码做出这个决定:
var A = require("AlgoFlux");
......甚至:
var ArrayH = require("AlgoFlux.Array");
......如果他们愿意的话。 : - )
ES6模块:
当你可以开始在野外使用它们时(因为它们是全新的,广泛的支持还没有),它将会是:
import A from 'AlgoFlux';
或
import {Array as ArrayH} from 'AlgoFlux';
答案 1 :(得分:0)
我会用下划线表示,这样你就可以拥有
your_namespace.method(someArray)
或
your_namespace(someArray).method1().method2() etc
AlgoFlux
对于命名空间来说有点太长了(并且jC中的lowerCamelCase更常用),因此我会选择像
afx.array.getRandomValues(...)
d3
是这种多级命名空间的完美示例。