This post originated from an RSS feed registered with Java Buzz
by Carlos Perez.
Original Post: Should Meta Tags Be Considered Harmful?
Feed Title: .:Manageability:.
Feed URL: http://www.manageability.org/blog/stuff/rssDisabled?portal_status_message=Syndication+is+Disabled
Feed Description: Random thoughts on the manageability of complex software.
There's an interesting thread at the AspectJ mailing list, it revolves around the advantages of AspectJ over emerging AOP frameworks. One question that keeps coming up is the advantages or disadvantages of meta attributes (i.e. tags).
Gregor Kizcales argument against tags is that it's not as scalable as defining poincuts. Furthermore, because when you insert a tag in a class it isn't "oblivious", an essential characteristic of AOP (see definition). At the eve of JSR 175, two compeling arguments against the utility of meta attributes.
I see two reasons why people like tags. Its always so much easier to just add a tag than it is to define a pointcut. Switching from locating a thing to describing how to locate a thing is too much of a speed bump for most people. Its always easier to see everything in one place. Having tags makes it easy to see at a glance what effects a join point. The benefits then are pretty clear.
However, the "Oblivious" property is essential to the definition of AOP, it loosens the coupling between classes and aspects. Tags however aren't oblivious, although they are loosley coupled to their aspects in that coupling is through an intermediary, that is the name of the tag.
The tag however is now spread out throughout the code so maintainance may be a little bit more difficult. But, that doesn't mean that you can't build in compiler technology to tell you where all the tags are.
Also, by the same line of reasoning, you can always build IDE technology that when you add a tag then it creates a new aspect or is added to an existing one. So in Eclipse terminology, you add a "marker", which has a "quick-fix" that converts a tag to an aspect. Just like a "quick-fix" converts an undefined method into a defined one in another class. In otherwords, given the right IDE technology, you don't really need meta tags.
This brings us to a bigger question, should a programming language be embelished with constructs to compensate for the lack of IDE support?