Neither my tech teacher or I think that putting code into a module counts as UI separation.
It really ticks me off when I look at converted VB source code and they have all of there controls (PushButtons, Sockets, etc.) "forward" to a module, and then that module calls that socket DIRECTLY.
I was talking to the guy that wrote MikeBot, first complaining that there where swear words in his comments, and we started discussing programming. His idea of UI and code separation was to have modules do all the "processing".
NO NO NO NO!
Correct me if I am wrong, but to correct way to do things involves a class hierarchy. For example, you would have a class called PacketSocket, which would use other classes such as PacketBuilder and PacketBuffer to pass a packet in an event. Then, you could create 2 sub-classes, rawbnetsocket, and rawbnlssocket. There, you handle all the connection information. For example, in the BNLS socket, you would have a method called "SendCDKey" which would trigger an event that included (or just returned) the hashed CDKey. Then you could sub-class rawbnetsocket to have methods such as Whisper, SayText, etc.
So many people use the module method, I figure there has got to be a reason, but I just can't find one!