Andy,
When I architect modules, one of the things I look at when determining how they are packaged and the domain data that they will use. In my tutorial on Module Views and Navigation, I show how you can create multiple module views in a single module definition. Those views will be in a single project, will share a common data access layer, and will be packaged together as a single module.
But you can also create a single Visual Studio project that has multiple views AND multiple module definitions (meaning multiple module extensions for users to drop on a page). These modules can still be installed as one package and use a common assembly which has your data access layer.
The way to do this is to include two package elements in your DNN manifest, each having a unique module name and module definitions, but sharing the same assembly. It looks like this:
<dotnetnuke version="5.0" type="Package">
<packages>
<package name="Module 1" type="Module" version="00.00.01">
<friendlyname>Module 1</friendlyname>
...
<components>
<component type="Module">
...
</component>>
...
<component type="Assembly">
...
</component>
</components>
</package>
<package name="Module 2" type="Module" version="00.00.01">
<friendlyname>Module 2</friendlyname>
...
<components>
<component type="Module">
...
</component>>
</components>
</package>
</packages>
</dotnetnuke>
If you really need your module projects broken up into different Visual Studio projects, then another way to do this is to create a Class Library project and just put you DAL code in there. Then you can reference that common library in all of your module projects.
Hope this helps!
Scott