Supporting Effective Reuse And Safe Evolution In Metadata-Driven Software Development