gpt4 book ai didi

Javascript 方法组合器

转载 作者:行者123 更新时间:2023-11-30 00:33:34 24 4
gpt4 key购买 nike

所以,我一直在阅读 Reginald 关于 Method Combinators 的一些文章,我不得不说,他的写作风格并不是我所希望的。非常聪明,但我无法理解他的解释和用法。所以,我希望这里所有非常富有表现力的聪明才智 :-) 可以告诉我他们是否对方法组合器有一些实际用途……也许还有一个例子。

因此,这些是方法组合器的示例,在“将方法提供给其他方法”之外,我看不出有什么用法。我的意思是,我知道我们在回调等中经常使用这种风格,但这里有更深层次的含义/用法让我无法理解。

https://github.com/raganwald/method-combinators/blob/master/README-JS.md

  var __slice = [].slice;

this.before = function(decoration) {
return function(base) {
return function() {
decoration.apply(this, arguments);
return base.apply(this, arguments);
};
};
};

this.after = function(decoration) {
return function(base) {
return function() {
var __value__;
decoration.call(this, __value__ = base.apply(this, arguments));
return __value__;
};
};
};

this.around = function(decoration) {
return function(base) {
return function() {
var argv, callback, __value__,
_this = this;
argv = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
__value__ = void 0;
callback = function() {
return __value__ = base.apply(_this, argv);
};
decoration.apply(this, [callback].concat(argv));
return __value__;
};
};
};

this.provided = function(condition) {
return function(base) {
return function() {
if (condition.apply(this, arguments)) {
return base.apply(this, arguments);
}
};
};
};

this.excepting = function(condition) {
return function(base) {
return function() {
if (!condition.apply(this, arguments)) {
return base.apply(this, arguments);
}
};
};
}

最佳答案

使用 MVVM 的 AOP/方法组合器示例

首先,让你有一个触发长时间操作的商业模型(在咖啡中):

class A
operation: -> promise

它有一个成员开始与后端聊天并返回 promise .

您需要在操作进行时显示加载启动画面(或禁用某些字段)。当然,这不是业务流程的责任,因为它与 View 模型相关,与业务模型无关。

你在你的 View 模型中(在咖啡中)写了一些东西:

buildA = ->
a = new A()

a.operation = after a.operation, (result) ->
showSplash()
return result.then (v) ->
hideSplash()
return v

return a

然后当您需要一个 View 模型的实例时,您只需编写(在咖啡中)将 View 逻辑绑定(bind)到业务逻辑:

a = buildA()

就是这样!


应该用在什么地方比较多?

当然,它可用于测试。通常,当您分离概念时,您的测试会变得易于编写和支持。

例如,当您需要更改业务逻辑时,您只需更改业务模型(并仅为该模型添加测试)。当您需要更改 View 逻辑时,您只需更改 View 模型(并仅在此处添加测试)。如果您不为您的代码分离概念,那么该代码将难以支持和测试。

分而治之!

关于Javascript 方法组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com