Ruby中的面向切面编程

3
有哪些框架可以为Ruby添加AOP功能?
5个回答

13

使用 Ruby 2.0+,您不一定需要一个框架:

module BarkLogger
  def bark
    puts "Logging #@name's bark!"
    super
  end
end

class Dog
  prepend BarkLogger

  def initialize(name)
    @name = name
  end

  def bark
    puts "#@name the dog says bark!"
  end
end

Dog.new("Rufus").bark

输出:

记录Rufus的吠声!

Rufus狗说汪汪!


在��看来,这是一个很好的解决方案。它不需要任何宝石(gems)。 - Robbin Voortman

8

您没有指定评估不同框架的任何标准,所以这是我在谷歌上找到的一个标准,只用了3秒钟:Aquarium.


另一个建议来自@Telemachusgazer


2
是的,我做了差不多一样的事情:正如你所说,谷歌建议使用 Aquariumgazer - Telemachus
Aquarium 上一次发布宝石版本是在2009年10月。 - Andrew Grimm
@Andrew,Telemachus链接的Github页面显示了(更多)最近的活动,供参考。 - Matt Ball
这里值得一提的是,Aquarium不支持多线程:https://github.com/deanwampler/Aquarium/issues/39 - Andrzej Krzywda

2

不要介意我自己推广一下:aspector 可能是你正在寻找的东西。它允许你定义方面,然后将其应用于一个或多个目标。


1

我在大学项目中尝试过2到3年前的Aquarium gem。效果很好,项目的目的是与AspectJ进行比较,以找出它是否能够像AspectJ一样完成所有任务。当时,许多AspectJ能够完成的功能都缺失了。但现在我看到有很多新功能被添加进去了,所以值得再次尝试。


0

AspectR(最后一次发布似乎是在2002年)- 最初是Ruby中规范的AOP库。

Facets - 具有一些AOP功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接