• March 15, 2013, 11:42 p.m.

    Today I've decided to reorganise project's github a little to make it easier for others to differ from working ("building") code and broken one thats under heavy development.

    Right now there are two branches:

    master - working branch
    develop - development branch

    In perfect world all development will take place in "develop" branch until it becomes ready for real-world use, then it will be moved to master branch. In addition extra branches will be created for large-scale changes.

    Currently on tap is complete reorganization of code architecture. When I was starting this project, my code layout appeared as good idea but as I started to add more and more features... well, not so much.

  • Members 20 posts
    March 17, 2013, 8:07 p.m.

    We use the same tactics at work right now ;)

  • March 17, 2013, 10:46 p.m.

    Until now I was following Django's guidelines for projects. Every functionality was locked in its own "app" and Misago was nothing more than collection of apps. If you look at current master, there are lot of dirs. Each one of them is an "app". One app provides users listing and browsing, other app provides list of watched threads, etc ect. As number of apps increased code lost any "real" structure.

    With refactoring I am attempting to make code's structure easier to understand. Misago's code can be put in one of two baskets:

    • Foundation - this code provides features for other parts of code to use
    • Actions - this code interacts with users

    Looking at how Django itself is organised, I have refactored Misago to look like this.

    Everything you see here is foundation code... with exception of "apps" package, which provides forum actions ("apps" in Django nomenclature) based on foundation. As I am writing this foundation refactoring has been completed and I am extracting actions from old code into "apps" package.

    Now, there is one more reason for what I am doing. Misago is featured forum... but its also foundation for extending. New foundation layer is easier to explore and understand for possible extension authors. All models, middlewares, validators and signals are grouped together instead of being spread all over place. This makes it easier to find individual items. Same goes for services and libraries.