Hello.
If run full-table BGP, I would say it might be a bad idea to run BGP inside your network.
If you learn only 0.0.0.0/0 via BGP, then it's easier to redistribute it into IGP per DC.
Regarding public prefixes - /21 vs specific /24s might be a good idea; if you have DMZ, then the challenge is to route traffic to proper DMZ (you may try it with different VRF).
PS: it's hard to say if it's good design or not, we need to know what are the original business requirements and where different services will be located.