Pergunta

Estou tentando aprender Asp.net Mvc, então estou experimentandoesse Tutorial.

Eles falam sobre o Repository Pattern e como é fácil mudar para outra tecnologia de acesso a dados em vez de apenas chamar Linq to Sql diretamente.

Usar LINQ to SQL em uma classe de controlador dificulta a troca de tecnologias de acesso a dados no futuro.Por exemplo, você pode decidir mudar do Microsoft LINQ to SQL para o Microsoft Entity Framework como sua tecnologia de acesso a dados.Nesse caso, você precisaria reescrever todos os controladores que acessam o banco de dados em sua aplicação.

Observação:Eu nunca entendi como uma interface funcionava antes de ler este tutorial e ainda não está 100% claro.Vejo isso agora como uma espécie de 'modelo' para uma aula.

Depois de usar o Linq to Sql com sucesso, pensei que seria bom experimentar o Ado.net Entity Framework, já que tenho lido muito sobre isso.Eles disseram que usar o Repository Pattern facilitaria a troca, então pensei em testar isso.

Minha pergunta é: o que devo fazer para mudar para Ado.net EF?

Isso é o que acho que deveria fazer.

  • Adicione o arquivo Movie.edmx e configure-o (adicione minha tabela de filmes).
  • Escreva uma nova classe baseada em IMovieRepository e talvez chame-a de MovieEFRepository.
  • Altere o parâmetro no construtor do controlador para MovieEFRepository.Essa é a primeira coisa que acho estranho porque no tutorial dizem que não usar o repositório vai te obrigar a trocar todos os controladores caso mude para outro datasource.Não preciso alterar todos os controladores de qualquer maneira, já que estou especificando a classe MovieRepository?
  • O último ajuste que acho que preciso fazer é mudar a Visualização.Porque está usando a classe Product que foi criada pelo designer Linq to Sql.Não tenho certeza de como vou fazer isso.Acho que deveria ter usado algum objeto que não dependesse do arquivo dbml?

Perdoe-me se tenho uma visão um pouco simplista do Asp.net Mvc.Sou webdesigner com muito interesse em desenvolvimento web Asp.net.

Foi útil?

Solução

Você pode ter seu repositório desacoplado por causa da injeção, não se você seguiu apenas os exemplos por causa de

public MoviesController() : this(new **MovieRepository**())

Recomendo que você leia sobre o IOC, é fácil e muito interessante, você pode usar um contêiner IOC como o Castle Windsor.

Com isso, seu contoller terá apenas um construtor, aquele que possui a interface, e não precisará ser alterado.

Com suas entidades você pode fazer o mesmo que com os controladores, criar uma interface para cada entidade e usar o padrão ioc também, com isso você só terá que alterar o arquivo de configuração do seu contêiner ioc.

Se você não fizer essas coisas, você está certo, precisará mudar tudo o que disse.

Espero que ajude!Desculpe meu ingles!

Outras dicas

Então, depois de alguns dias de leitura e muita pesquisa no Google, consegui que funcionasse.Primeiro tentei descobrir o que realmente significava IoC (Inversão de Controle).

Um dos primeiros sites que encontrei foi um site com um screencast sobre Unity.Que é uma estrutura DI/IoC para .Net.

Olhando agora, este é na verdade um screencast muito bom e um exemplo de como é fácil usar Unity e IoC/DI.Na época eu não entendi completamente, então continuei pesquisando no Google.

Um site que eu sempre encontrava era o de Martin Fowler.

Para mim, uma pessoa que é novata em codificação, este site é um pouco abstrato.Além disso, isso pode parecer estranho, mas a fonte, a altura da linha e a tipografia daquele site eram realmente horríveis, o que tornava ainda mais difícil a leitura.

O próximo site que li foi sobre o Castelo de Windsor, já que Alfredo Fernández disse que era fácil de usar.

A documentação não era tão ruim, mas tive alguns problemas ao converter o exemplo básico de "primeiros passos" para meu aplicativo Asp.net Mvc.Também faltaram as partes 2 e 3 desde o início.

Depois disso comecei a procurar os diferentes frameworks para ver se conseguia encontrar um exemplo realmente básico.Se eu apenas olhasse o primeiro screencast novamente, teria consertado muito antes, mas de alguma forma perdi o controle.

Tive muitos problemas com arquivos de configuração xml e não consegui fazê-los funcionar.Tentei Windsor, Structure Map e Spring.net, mas sempre fiquei preso com os arquivos xml.

Então decidi ir ao site do Asp.net Mvc porque foi lá que comecei a aprender sobre o Asp.net Mvc.Achei os primeiros screencasts e apresentações do MIX09 muito claros e entendi muito do que as pessoas estavam falando.Fiquei preso no segundo screencast de Rob Conery ao construir o aplicativo Storefront.Como agora eu sabia um pouco mais sobre repositório e IOC/DI, pensei que seria uma boa ideia começar a assistir os screencasts de Rob Conery novamente.Em um dos screencasts ele fala sobre o upload de todas as amostras para o codeplex.

Fui ao codeplex e descobri que você pode navegar pelos arquivos de origem sem baixá-los.Tentei descobrir como Rob Conery lida com IOC/DI com seus repositórios.Fiquei feliz em ver que ele estava usando o Structure Map, mas em vez de usar um arquivo de configuração xml, ele estava usando uma classe bootstrapper que registra todas as interfaces em sua classe concreta.

Depois de tentar isso com meu aplicativo da web, finalmente consegui fazer o Mapa de Estrutura funcionar em meu aplicativo (Viva).

Ele também me mostrou como corrigir a dependência da minha classe Product que vem do Linq para o Sql.Ele cria um objeto extra que é chamado por "selecionar novo produto {}" nas consultas Linq.

Uau, essa resposta é um pouco mais longa do que planejei, mas espero que isso ajude outras pessoas como eu, que são muito novatas em codificação e Asp.net Mvc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top