l**********n 发帖数: 8443 | |
z****e 发帖数: 54598 | 2 反了
monad是aop的一种
aspect是一个抽象的概念
monad是design pattern,不仅包括了aspect
还定义了怎么操作 |
z****e 发帖数: 54598 | 3 我觉得这样理解不好
还是分开来,aop理解aop
monad理解monad
monad通过flatmap那些理解比较容易
coltzhao解释得很清楚,aop过来理解反而乱
aop难点是aspect,其他都简单 |
z****e 发帖数: 54598 | 4 monad是一种特殊的apect
aspect不管你怎么处理
但是monad定义了bind&return
你如果不满足这两个条件,就不是monad
但是完全可以是aspect
aspect的scope甚至超过了functor
比functor更加的general,functor毕竟定义了bind
而aspect只要你能找到pointcut,能作出相应的操作
就是aspect,未必是bind
从自由度来说,aop更加容易,因为限制少
比functor还自由,tradeoff就是你需要用它的编译器
所以scala等jvm上非java语言就不能用了 |
l******t 发帖数: 55733 | |
l**********n 发帖数: 8443 | 6 Here is an aop example in angularjs:
(function() {
var geoDecorator = function($delegate) {
var locate = function() {
var start = new Date();
var result = $delegate.locate();
result.always(function () {
console.log("Geo location took: " + (new Date() - start) + "
ms");
});
return result;
};
return {
locate: locate
};
};
var testApp = angular.module("testApp");
testApp.config(["$provide", function ($provide) {
$provide.decorator("geo", geoDecorator);
}]);
}()); |
z****e 发帖数: 54598 | 7 写成这样多恶心
你看aspectj里面
public aspect PeopleAspect {
pointcut setXXX():
call(public void People.set*(*));
before():setXXX(){
System.out.println(">>> Log : modify people's attribute ...");
}
}
哪个是aspect,pointcut在哪里,before还是after都非常直观
你这里能直接看出pointcut在哪里吗?如果不认真parse代码的话
"
【在 l**********n 的大作中提到】 : Here is an aop example in angularjs: : (function() { : : var geoDecorator = function($delegate) { : var locate = function() { : var start = new Date(); : var result = $delegate.locate(); : result.always(function () { : console.log("Geo location took: " + (new Date() - start) + " : ms");
|