A development team is building a decentralized application (dApp) that will require periodic updates to its business logic after deployment. Which smart contract design pattern is most appropriate to allow for these updates without requiring users to migrate to a new contract address?