The mid level API in my opinion serves two purposes. One ist to provide simplified access to data content regardless of where it is located. In other words to simplify the appearance of the object to the programmer. [...] The nameing tells you what you can expect to get, no matter where it is located in the internal data structures. [...] The second purpose is a logical grouping of information and a processing of information to calculate derived information frequently used. An expample for that would be the scaling of dose pixel values into units of gray. [...] For example by providing a constructor for any of the IODs taking a filename or a dcmdataset and to extract the structures and image values into a data structure easily transferable to other tools and libraries for further processing, like visualization.
I agree to all of the above.
With regard to the sequence helper functions in the medium-level API: I don't think that getItemFromExposureSequence(index) is easier to use than getExposureSequence[index] or getExposureSequence().getItem(index) - it's just another notation and that is the reason why I wrote that it would be a simple replication. Of course, in case of deeply nested sequences it might be useful to provide such helper functions for the medium-level API. However, the naming of the functions should be derived from their semantics and not directly from the data elements (sequences) where the information is stored.