SourceWeave.Net: Cross Language Source Code Weaving
A well modularised software system reduces complexity and supports change. Separating concerns as a means of achieving good modularisation, is therefore one of the primary principles in software engineering. In general, software development paradigms provide their own specific constructs to support modularisation. Such constructs encapsulate some kinds of concerns and define relationshiops between them. However, complex entities and relationships exist in many domains that existing software paradigms have lacked the constructs to modularise and express naturally. Concerns are thus forced to cut across each other within the contructs that the paradigm provides. Aspect Oriented Software Development (AOSD) is relatively new paradigm that enhances concern separation, by providing the means to modularise such concerns, called crosscutting concerns.Many single language environments have been extended to enable AOSD concepts. Microsoft's .Net platform has opened up the possibility of leveraging AOSD concepts in a multi-language environment. The migration path to AOSD has been established in single language OO platforms, however this is not the case for the .Net multi-language platform. SourceWeave.Net is an aspect-oriented extension to the .Net programming framework. it works as a preprocessor that weaves source code, potentially written in different languages, through a rich joinpoint model. A joinpoint model determines the extent to which a developer can modularise crosscutting behaviour and compose his code into a functional system. A weaver is a tool that performs composition.There are many possible approaches to introducing AOSD to .Net. These range from those that work with .Net artifacts, such as source code or IL, to those that weave at different code translation points, such as compile-time, load-time and run-time. SourceWeave.Net's source code manipulation approach has a number of advantages over the other approaches. These advantages are in three main areas. Firstly, a programmer can debug the composed system. Secondly, the jointpoint model is rich and highly extensible. Finally, all languages that conform to the .Net framwork language standards can be supported.