+1 On Tue, Mar 13, 2012 at 6:03 PM, Marvin Humphrey <[email protected]>wrote:
> Greets, > > Logan and I were discussing on IRC that CFC roughly follows a > Model-View-Presenter design pattern[1]. > > * The parser reads in the source code files and builds a model of the > class > hierarchy. > * The "Core" view traverses the model and generates per-class C header > files [plus some stuff]. > * The "Perl" view traverses the model and generates Lucy.xs, "typemap", > etc. -- which contain per-class binding code [plus some stuff]. > > To reflect this architecture, I think it makes sense to do a slight > reorganization of the CFC class hierarchy. > > Everything that is used to model the class hierarchy moves under > "Clownfish::CFC::Model": > > Clownfish::CFC::Class -> Clownfish::CFC::Model::Class > Clownfish::CFC::CBlock -> Clownfish::CFC::Model::CBlock > Clownfish::CFC::DocuComment -> Clownfish::CFC::Model::DocuComment > Clownfish::CFC::File -> Clownfish::CFC::Model::File > Clownfish::CFC::Function -> Clownfish::CFC::Model::Function > Clownfish::CFC::Hierarchy -> Clownfish::CFC::Model::Hierarchy > Clownfish::CFC::Method -> Clownfish::CFC::Model::Method > Clownfish::CFC::ParamList -> Clownfish::CFC::Model::ParamList > Clownfish::CFC::Parcel -> Clownfish::CFC::Model::Parcel > Clownfish::CFC::Symbol -> Clownfish::CFC::Model::Symbol > Clownfish::CFC::Type -> Clownfish::CFC::Model::Type > Clownfish::CFC::Variable -> Clownfish::CFC::Model::Variable > > Then, "Clownfish::CFC::Binding::Perl" gets renamed to > "Clownfish::CFC::View::Perl" and "Clownfish::CFC::Binding::Core" gets > renamed > to "Clownfish::CFC::View::Core": > > Clownfish::CFC::Binding::Perl -> Clownfish::CFC::View::Perl > Clownfish::CFC::Binding::Perl::Class -> > Clownfish::CFC::View::Perl::Class > Clownfish::CFC::Binding::Perl::Constructor -> > Clownfish::CFC::View::Perl::Constructor > Clownfish::CFC::Binding::Perl::Method -> > Clownfish::CFC::View::Perl::Method > Clownfish::CFC::Binding::Perl::Pod -> > Clownfish::CFC::View::Perl::Pod > Clownfish::CFC::Binding::Perl::Subroutine -> > Clownfish::CFC::View::Perl::Subroutine > Clownfish::CFC::Binding::Perl::TypeMap -> > Clownfish::CFC::View::Perl::TypeMap > > Clownfish::CFC::Binding::Core -> Clownfish::CFC::View::Core > Clownfish::CFC::Binding::Core::Class -> > Clownfish::CFC::View::Core::Class > Clownfish::CFC::Binding::Core::Aliases -> > Clownfish::CFC::View::Core::Aliases > Clownfish::CFC::Binding::Core::File -> > Clownfish::CFC::View::Core::File > Clownfish::CFC::Binding::Core::Function -> > Clownfish::CFC::View::Core::Function > Clownfish::CFC::Binding::Core::Method -> > Clownfish::CFC::View::Core::Method > > The punchline: > > To add a new host language to Clownfish, write a new View for CFC. > > I hope that helps to clarify both how CFC is organized and what it takes to > contribute a new host language. > > Marvin Humphrey > > [1] CFC is clearly Model-View, but it's not MVC (because it's not > interactive, so there aren't any Controllers). "Presenter" is kinda > sorta > right. >
