Your question is pretty broad, but I'll try to give you a bit of guidance. When dealing with Enterprise Applications, you generally have multiple tiers. In general, the more tiers you can break your application into, the better. Commonly, you would have, at minimum, a Data Tier, a Business Logic Tier, and a UI Tier. A properly architected application would allow for multiple different UI Tiers (WPF, Silverlight, ASP.Net MVC, etc.) to all communicate with the Business Logic tier, which in turn would then communicate with your Data Tier. If you decided to change the storage from one medium to another, such as changing from SQL to MongoDB for example, those changes would happen on the Data Tier and should have little to no impact on the Business Logic, and no impact at all on the UI. In the past, WCF was popular for building the intermediate Tier, but more recently, ASP.Net WebAPI is becoming popular due to it's RESTful nature.
So in a basic application for your design you might have 5 projects:
- Data Project, containing Entity Framework and related database entities, exposing CRUD operations for the WebAPI project to consume.
- WebAPI project, containing RESTful API for generic access to data for the UI projects to consume. These methods perform business validation, error checking, etc. before calling off to the CRUD operations in the Data Project.
- WPF project, providing desktop UI and desktop specific features.
- ASP.Net MVC project, providing web access and web specific features.
- Unit Test Project, for functional verification that changes in one project do not cause features in another project to break.
Other projects may be sprinkled in, like, say, a Pure JavaScript project, or a SignalR project for realtime notifications.
Edit
For very small projects, either the MVC or MVVM patterns are merely extensions of this concept, boiled down to fit a single project.
MVC is the web framework take on things, where you have a Model (Data Tier), a View (UI Tier), and a Controller (Business Tier). MVVM is a Model, View, and ViewModel. This difference is mostly related to the fact that on the Web, Page navigation is handled by the Controller, which is on the server side, while in a WPF application, Page navigation is much more likely to be handled in the View. In even the smallest project, you will need to re-create the UI between a web project and a WPF/Webforms app, and the Controller / ViewModel are platform specific as well, but there's no reason at all you couldn't re-use the Model Tier. Really there aren't enough similarities between a desktop project and a web project for significant re-use, which is why segmentation and adding a WebAPI project minimizes the amount of re-implementation per platform.