My objections are the same as yours, I see a lot of code duplication and the use of a private method. If you want to use this information from here it needs to be public. If you make your method/property public there would actually be two ways to get to the same information which is not ideal but not a deal breaker. However, a need has to be demonstrated. I currently see no need for additional methods on the cube because in my opinion
```python
coords_and_dims = [(coord, cube.coord_dims(coord)) for coord in cube.dim_coords]
```
is simple and readable. I can use the same pattern for ```cube.dim_coords```, ```cube.aux_coords```, ```cube.derived_coords``` or ```cube.coords()``` constrained in anyway I like. Should we have a method for each of these? I do not think so. List comprehensions and generator expressions are clear and concise. A multitude of difficult to name methods on an already cluttered class is neither clear, concise or easy to maintain. :thumbsdown:

One further point. If usercode makes use of the dimension, it raises alarm bells. Clearly when performing low level manipulation of the cube we need to inspect and perhaps modify this mapping (I do so in a helper function that restores coordinates that have been collapsed/sliced to scalars). Adding more ways to get to this information raises similar sounding alarm bells.