我正在从C#背景中学习更先进的脊髓灰质炎防治策略,并想知道如何实施或是否实施原型验证的良好想法。 例如,如果物体或功能需要其参数之一才能满足某种接口,则你可以检查其界面。
var Interface = function Interface(i) {
var satisfied = function (t, i) {
for (var key in i) {
if (typeof t !== object ) {
return false;
}
if (!(key in t && typeof t[key] == i[key])) {
return false;
}
}
return true;
}
this.satisfiedBy = function (t) { return satisfied(t, i); }
}
// the interface
var interfacePoint2D = new Interface({
x: number ,
y: number
});
// see if it satisfies
var satisfied = interfacePoint2D.satisfiedBy(someObject);
我在提出这一战略时,只用界面验证物体,而忽视了物体的内部执行。
或者说,你正在使用原型遗产,你是否应该根据原型功能验证参数? 我的理解是,你使用原型来实施违约功能,而接口没有具体说明任何违约功能。 有时,你将目标转至职能need,为履行这一职能,某些缺省功能。 是否最好对接口加以验证,或者你是否应当对原型进行验证,如果是的话,如何做到这一点?
www.un.org/spanish/ecosoc 我正在就我为什么要这样做提供更多情况。
例如,在网上游戏设计中(主要是用javascript书写的游戏)。 在这方面,我有兴趣进行验证,原因有二:
1) Providing a strong public API for modding the game if desired
2) 预防(或极不鼓励)潜在的che客
这需要在定制和滥用之间保持平衡。 具体来说,一种情况是设计物理发动机,使游戏中的物体对重力作出反应。 在现实的系统中,用户一定能够将不重力的物体添加到系统上。 该系统具有功能,表明在任何特定时刻重力的全球影响:
function getGravityAt(x, y) {
// return acceleration due to gravity at this point
}
2. 作出反应的物体采用这种方法更新其加速度:
function update() {
this.acceleration = getGravity(this.position);
}
至少要做的是,确保系统所增加的任何物体都有更新方法,但你仍然有责任确保更新(更新)的方法真正是为了对严重性作出反应。 如果只允许从预约更新方法中继承物体,那么你至少在某种程度上知道该系统中的一切都现实的反应。