Aspectroid is an exploration of the software design space, moving beyond conventional object oriented design and further into the aspect-oriented expanse. It takes place as a set of Episodes, where I present a small-scale but non-trivial problem, and I discuss a complete design, together with full source code and complemented by diagrams.
I launched this project because I was looking for a different kind of design narrative. Traditional design literature is not doing well. Arguably, code is the contemporary form of design narrative; however, this position leaves many important notions and opportunities behind. I wanted to talk about realistic design issues, outgrowing the small, crafted examples one can easily show in a blog post, in a short paper, or in a few code snippets, moving closer to the complexity of full-blown applications. The straightforward way to do so is to actually develop an application as part of the narrative.
For quite some time, I've also been pondering on how to best combine OOP and AOP, so that I could tackle design challenges unencumbered by old, crystallized yet sub-optimal strategies and patterns. AOP is a powerful, yet largely misunderstood and misrepresented paradigm. It is often depicted as a way to patch code, or with limited potential beyond a few technological aspects like logging. This is reminiscent of OO early years, before proper OOD techniques were introduced. Aspectroid will take AOP toward AOD, and use it as a full-fledged design vehicle.
The technological choices easily followed. AspectJ is the most mature aspect-oriented language. Developing yet another server-side application looked a bit boring. Android is more fun, and I've spent a lot of time in the past few years working on the Android platform. Therefore, Aspectroid will focus on aspect-oriented design within the context of Android apps, using AspectJ. As usual, most of the notions and insights are completely platform-independent, and can be translated elsewhere.
I want to stress that my aim is to explore the software design space, not to build a best-seller, eye-candy app. Please come here looking for an aesthetics of code, not for the blending of colors.