Hiya!
So, here is my bunch of suggestion and the things I consider working on, at
least reserving some part of my spare time to focus on it:
---- Configuration language ----
Something better than xml to describe aspect configurations, with a
easy-to-grasp semantic and ressembling aspectj (although xml should still be
supported)
import MyAssembly
import OtherAssembly
// These declarations forms a global declaration that can be
// referenced by any aspect declaration
interceptors
{
"shoot", MyInterceptorClass in AssemblyX;
"logger", MyLoggerInterceptor
}
// Idem, ibidem
mixins
{
"customer", CustomerClass in CustomerAssembly
}
// Aspect declaration
aspect JohnMcBrother for MyType
{
}
// or
aspect JohnMcBrother for (* in AspectSharp.Core)
{
}
// or (with some regular expressions)
aspect JohnMcBrother for (* in AspectSharp.Core !~ AspectEngine)
{
}
aspect JohnMcBrother for (=~ Customer*)
{
}
// Pointcuts
aspect JohnMcBrother for MyType
{
pointcut execution(void DoSomething())
{
interceptor { "shoot" }
}
pointcut execution(*)
{
interceptor { "logger" }
}
pointcut execution(* get_*())
{
interceptor { MyStrangeInterceptor in MyStrangeAssembly }
}
}
// Mixins
aspect JohnMcBrother for MyType
{
// Mixins are now Ruby like :-)
include "customer"
include MyOtherMixin in MyOtherAssembly
}
This content will go through a lexer, parser and a semantic checking, and
meanwhline constructing a object model. This same object model can be used
in the xml configuration version.
---- Design changes ----
- AspectEngine be an instance class instead of a singletion/static
- Drop the IMixin, IProxyAware
- Drop the AopAlliance "support"
---- Refactoring ----
- The test cases are a bit confusing, I suggest start all this process by
creating brand new test cases, and only after that start to code this new
version.
What do you guys think?
Cheers,
--
hammett
http://www.apache.org/~hammett/
http://jroller.com/page/hammett
|