OpenZeppelin uses the "unstructured storage" proxy pattern.
See the documentation for details:
OpenZeppelin in the proxy patterns blog post (https://blog.openzeppelin.com/proxy-patterns/) explored three proxy pattern options:
An upgradeable contract ...
The address you provided is 95 characters long. That means 190 bytes. That will not fit in any byte arrays Solidity supports. Your only options for storing it are either a string or bytes (dynamically-sized arrays, see https://solidity.readthedocs.io/en/v0.5.3/types.html#arrays for more details). But there are no efficiency improvements between those two ...
These 4 are really very well-know patters.
(1) After analysing Delegatecall-based approach, I give up it because of two main reasons: you can only add new variables not delete or change existing ones. So, if you have a struct defined and you want to change a type or add an existing field, if you want to delete a variable etc.... you cannot. Also, it makes ...