I always like creating a middle layer to hold business logic. Backends are for basic data retrieval, etc and front ends are for display and user interaction.

I once had to update an application that was windows based and give it online functionality that did mainly the same thing. That necessitated an almost complete rewrite of the system because all the logic was inside of the various forms. If it had been broken out properly, the project would have meant building some webforms and calling the preexisting dlls. The same would be true if you want to change databases or something.