Como posso estruturar um projeto ASP.NET para reutilização
-
26-09-2019 - |
Pergunta
Estou no processo de projetar um aplicativo da web que terá vários módulos instaláveis que fornecem funcionalidades diferentes.Há muitas coisas comuns acontecendo aqui e tenho três bibliotecas de classes C# que sei que serão fáceis de usar em diferentes projetos.
A parte em que estou preso é o próprio site.Idealmente, eu gostaria de fazer um ASP.NET biblioteca de páginas que pode ser reutilizado em vários projetos, mas entendo que isso não é possível.
Como vocês estruturam os projetos do seu site para que as páginas possam ser reutilizadas em vários projetos?Até agora, a única solução que encontrei foi criar um repositório em SVN e referenciá-lo no svn:externals
propriedades do projeto principal.Isso me permite adicionar a esse diretório páginas que são comuns a todos os sites, e sei que poderei usar isso para verificá-las em outros projetos.No entanto, acho que isso é um pouco desajeitado e causará problemas ao criar novos projetos (haveria uma série de etapas para criar a nova solução, garantindo que os recursos externos corretos estejam implementados).
Existe uma solução melhor?Qual é a melhor maneira quando você deseja compartilhar arquivos ASPX comuns em vários projetos de clientes?Como você gerencia as mudanças contra eles?
Desde já, obrigado!
EDITAR:
Muito obrigado a David por sua resposta.Pensei mais sobre isso e pensei em listar algumas de minhas ideias/preocupações mais concretas.Primeiramente, um pouco mais sobre o(s) projeto(s).Principalmente, é um CMS.No entanto, também temos clientes que desejam CRM, e também há clientes que não desejam nenhum dos dois e desejam um sistema totalmente personalizado desde o início.
Na minha postagem original acima, falei sobre ter subdiretórios da raiz principal (por exemplo, cms
), usando svn:externals
para permitir fácil compartilhamento de páginas da web em vários projetos.Estou começando a pensar que esta é a única maneira de fazer isso.Uma coisa que me incomodou foi se a URL do cliente fosse:
http://www.shotgunanddribble.com/cms/content.aspx
No entanto, acho que posso usar o Application_BeginRequest
para mitigar URLs horríveis reescrevendo-os de acordo com a configuração do site do cliente.Por exemplo, se um cliente fosse apenas um CMS, eu poderia reescrever seu domínio de nível superior para /cms/
.O mesmo aconteceria se eles fossem um CRM.Se fossem ambos:
http://www.shotgunanddribble.com/
-> /cms/
http://crm.shotgunanddribble.com/
-> /crm/
Existe alguma desvantagem em usar esse tipo de reescrita?Eu acho que, a menos que alguém tenha alguma ideia mágica, svn:externals
é minha única esperança.
Solução
O código real é fácil de colocar em outros assemblies e herdar, mas os arquivos ASPX são definitivamente uma história diferente.Que tal uma biblioteca comum de controles de usuário para conter a maior parte do conteúdo de exibição, e cada projeto teria suas próprias páginas que apenas enquadram os controles de usuário?Eu nunca tentei, então pode haver alguma "pegadinha" que não estou imaginando agora.