Design patterns for modernizing legacy code bases