J. Ambrose Little
Steve,
Let me add a slightly different perspective and hopefully some clarification.
1. You should, in most cases, create a Class Library project and use that to contain your domain model (sometimes called BLL). This is where your domain objects, their behaviors, and usually your business logic will reside. There are some interesting possibilities in using the Windows Workflow rules engine in your domain model that allow you to store your business rules outside of imperative code, so you can share rules across applications or, at a minimum, make it easier to change rules (even at runtime). But I digress, a good starting point for any application is a domain model in a class library.
2. Depending on your needs, you may want to isolate your data access layer by using something like the provider model or dependency injection pattern (you can search on these terms to learn more). But often, LOB apps don't need to have a strict isolation of data access from the domain model, so you can put that code into your domain model library--just at least consider isolating it enough so that refactoring it or changing the data layer wouldn't be cataclysmic.
3. You can create a UI/presentation layer project in the tech of your choice. It sounds like WinForms is what works for you, but you could do it in WPF or ASP.NET or Steve's Presentation Framework. It is totally fine for this to be a Windows Forms application project (in VS), and in fact, that's probably the best way to go to avoid having to manually set it up to run as has been discussed here.
Now, if you want another layer of separation between the UI elements themselves (views) and the domain model, you can add a controller or presenter layer (hence the model-view-controller and model-view-presenter patterns). It sounds like maybe this is what you are imagining. It lets you define contracts between your model and views that make developing a more loosely coupled UI possible. If you are interested in this, I suggest you check out the Composite UI Application Block (CAB) as it does the grunt work of the framework for you. And in the future, keep an eye on Acropolis. Third parties like Infragistics offer ways to integrate their UI stuff into these kinds of frameworks.
Also, if you want a full, aided/rapid application dev tool that builds on these concepts, check out DevForce IdeaBlade. It's a pretty impressive tool, IMO, particularly if you have a pre-existing data source. They, too, offer a pluggable UI framework for integrating third parties.
Anyways, the key things are that you're right in not wanting to start from a WinForms app. When designing an application, you're best starting with the domain, modeling the objects in the domain, their relationships and behaviors, and creating that in code (class library) so that you can use that with any UI. Also, if you take this approach, you can later then relatively easily expose your application's services to others in an SOA environment--this is not really doable without major refactoring if you don't separate the domain logic from the UI.