Что касается Почему вопрос:
Модули класса должны содержать блоки кода: они буквально ничего не делают, если класс не инициализирован.
Нормальных модулей не так много. Любая публично объявленная вещь в обычном модуле доступна всем.
Нет смысла иметь тип Public
в модуле класса, поскольку, если внешний код использует этот тип, он не обращается к нему через модуль класса. И если его использует только модуль класса, он не должен быть публичным.
Разумно организовать ваш код в логических единицах. Если для вас логично поместить все открытые типы в один модуль, сделайте это, но это не очень масштабируемое проектное решение. Это так же разумно, как и решение поместить все открытые функции в один модуль, а все открытые - в другой. Для меня часто более логично поместить весь код обработки ошибок в один модуль, начиная со всех открытых объявлений типов, используемых в функциях этого модуля.