As a good little OOP Coder I think it's a good idea that we seperate code in seperate DLL's so that's it's easier to update (and break compatiblity) seperate parts of code.

Correct me if I'm wrong here, this is just an sketchy idea. Feel free to come up with something better.

Main App
|
|\_ Engine (Sound, 3D, Input, etc)
|\_ Network (Network Protocol)
|\_ Game (AI, Parsing Gamedata)
\_ DataFetcher (Prefetch data via Network)

For easy use I guess it's easier to use design-time binding for now instead of late-binding during runtime.