Eu escrevi um portal ASP.NET WebForms para um cliente. O projeto meio que evoluiu, em vez de ser adequadamente planejado e estruturado desde o início. Conseqüentemente, todo o código é agrupado no mesmo projeto e sem nenhuma camada. Agora, o cliente está satisfeito com a funcionalidade, portanto, gostaria de refatorar o código de modo a ter confiança em liberar o projeto. Como parece haver muitas maneiras diferentes de projetar a arquitetura, gostaria de algumas opiniões sobre a melhor abordagem a ser adotada.
FUNCIONALIDADE
O portal permite que os administradores configurem modelos HTML. Outros "parceiros" associados poderão exibir esses modelos adicionando o código IFrame ao site. Dentro desses modelos, os clientes podem registrar e comprar produtos. Uma API foi implementada usando o WCF, permitindo que empresas externas também fizessem interface com o sistema. Uma seção Admin permite que os administradores configurem várias funcionalidades e visualizem relatórios para cada parceiro. O sistema envia faturas e notificações por email aos clientes.
ARQUITETURA ATUAL
Atualmente, ele está usando o EF4 para ler / gravar no banco de dados. Os objetos EF são usados diretamente nos arquivos aspx. Isso facilitou o desenvolvimento rápido enquanto eu escrevia o site, mas provavelmente é inaceitável mantê-lo assim, pois está acoplando firmemente o banco de dados à interface do usuário. Lógica comercial específica foi adicionada às classes parciais dos objetos EF.
QUESTÕES
O objetivo da refatoração será tornar o site escalável, de fácil manutenção e segurança.
Que tipo de arquitetura seria melhor para isso? Descreva o que deve estar em cada camada, se devo usar o padrão DTO / POCO / Active Record etc.
Existe uma maneira robusta de gerar automaticamente DTOs / BOs para que quaisquer aprimoramentos futuros sejam simples de implementar, apesar das camadas extras?
Seria benéfico converter o projeto de WebForms para MVC?