Модули являются остатками VB6. Требуется для совместимости, нет смысла использовать их, когда вы программируете с нуля. Самая большая проблема с ними заключается в том, что они загрязняют глобальное пространство имен. Сначала это может быть хорошо, но очень плохо масштабируется. Тем не менее, они все еще используются для создания методов расширения, поэтому их добавление в глобальное пространство имен является желаемым эффектом.
Гроккинговые классы требуют понимания объектно-ориентированного программирования. Это не может вписаться в SO сообщение, есть много вводных книг, которые помогут вам в этом.