void Awake()
    {
        // Create the board model
        var boardModelFactory = new BoardModelFactory();
        var boardModel        = boardModelFactory.Model;

        // Create the board view
        var boardViewFactory = new BoardViewFactory();
        var boardView        = boardViewFactory.View;

        // Create the board controller
        var boardControllerFactory = new BoardControllerFactory(boardModel, boardView);
        var boardController        = boardControllerFactory.Controller;

        // Create the block models, views and controllers
        var blockModelFactory      = new BlockModelFactory();
        var blockViewFactory       = new BlockViewFactory();
        var blockControllerFactory = new BlockControllerFactory();

        for (int x = 0; x < BoardModel.Columns; x++)
        {
            for (int y = 0; y < BoardModel.Rows; y++)
            {
                var blockModel = blockModelFactory.CreateBlock();
                blockModel.Position     = new Vector2(x, y);
                boardModel.Blocks[x, y] = blockModel;
                var blockView       = blockViewFactory.CreateView((boardView as BoardView).gameObject);
                var blockController = blockControllerFactory.CreateController(blockModel, blockView);
            }
        }
    }