From Nicholas, at the tail of
However, if we annotate it as public, all the classes associated with them should also be annotated as public. Also, whenever we change the interface or any of the associated classes, it is an incompatible change.
In our case, BlockVolumeChoosingPolicy uses FSVolumeInterface, which is a part of FSDatasetInterface. In FSDatasetInterface, there are many classes should not be exposed. One way to solve it is to make FSVolumeInterface independent of FSDatasetInterface. However, FSVolumeInterface is not yet a well-designed interface for the public.
For these reasons, it is justified to annotate it as private, the same as BlockPlacementPolicy.
We should switch BlockVolumeChoosingPolicy to for a private audience.