It should be based on the business rules and security standards required in your environment. When I contracted with the military, absolutely no developer login could be found in production.
In public sector I do not thing there is any reason to give a developer access to production, however that is rare since some developers contain multiple hats of application admin as well. If your environment does not mix multiple hats in that manner then by all means revoke production access.
With UAT, however, I do not see any issue with giving developers limited access to object definitions. In user testing there may be things that can only be reproduced in that environment. If I am busy and have to get involved every time there is an issue, that can get to be a headache quickly. Allowing limited access so a developer can get involved on their own time may prove to be more efficient use of time in some shops, others maybe not. I for one do not have any issue with it, as long as there are some checks in place (monitoring, alerting, etc.).