Portable VS Shared – Xamarin.Forms

Olá pessoal,
No  meu post Criando um projeto Xamarin.Forms demonstrei como criar uma aplicação Xamarin.Forms e em meu exemplo demonstrei como criar uma aplicação utilizando o template Portable Class Library (PCL). Porém, também é possível criar uma aplicação Xamarin.Forms utilizando o template Shared. E é sobre isso que irei falar hoje, demonstrar o que é cada um deles, suas vantagens e desvantagens e quando optar pela melhor opção.

Shared

O template Shared é mais recente do que o PCL, foi criado para ocorrer uma maior centralização de códigos especificos de cada plataforma em um único projeto, no caso o nosso projeto Shared.
Segue a estrutura de um projeto Shared:

sharedApp

Podemos observar que nosso projeto Shared contempla apenas a classe App.cs, ou seja, tudo o que iremos usar de código compartilhado em nossa solução Xamarin.Forms será colocado no nosso projeto Shared.

O que pode nos causar um problema, já que a separação de código de acordo com cada plataforma é realizada da seguinte maneira:

if

Acredito que um dos maiores problemas que possa ser causado usando essa solução é o fato de leitura de código, pois muitas condições como a demonstrada acima, pode causar dificuldade de entendimento em uma possível manutenção no futuro.

Outro fator que vale ressaltar é que só conseguimos ver os erros no código da plataforma especifica quando o projeto é compilado para a sua respectiva plataforma. Ou seja, você só vai conseguir ver os erros relacionados a plataforma Android por exemplo, se você compilar o projeto para Android.

Outro atributo de um template Shared é o fato de não gerar uma biblioteca, dessa forma todo o código contido em nosso projeto Shared é acoplado no executável respectivo de cada plataforma. Dessa maneira torna-se impossível a execução apenas do código pertencente ao Shared, também não sendo possível realizar testes unitários.

Portable Class Library

A estrutura de um projeto PCL é mais clara, como podemos observar na imagem a seguir:

4

O projeto PCL como o nome já diz ele é “Class Library”, dessa forma ele gera uma biblioteca quando é gerado.
Assim, outros projetos conseguem referenciar essa biblioteca e ainda é possível a criação de testes unitários para testar apenas o nosso projeto Portable.
Neste caso os códigos específicos de cada plataforma precisam ficar cada um em um projeto, projeto este destinado a uma determinada plataforma. Por exemplo, códigos específicos do iOS ficarão no meu projeto “MeuApp.iOS”.

 

Qual escolher ?

Nos deparamos com essa dúvida de qual escolher, quando precisamos criar um novo projeto Xamarin.Forms. Caso sua aplicação não possua muita dependência de plataforma, ou seja, sua aplicação dependa mais do back-end e não tenha tanta necessidade de código compartilhado o Shared pode ser uma alternativa. Caso contrário eu recomendo o uso do Portable.

2 comentários em “Portable VS Shared – Xamarin.Forms

  1. Bom dia, estou com um problema que não encontro solução, eu crio um projeto CrossPlataform no visual studio 2017(uso windows 10), uso o Xamarin.Forms e PCl, ele cria os 4 projeto na solução tudo certinho, mas quando crio uma PCL para referenciar no projeto Portable, aparece o erro da img(a classe que quero referenciar se chama shared, mas ela é uma PCL, estava seguindo os tutoriais do Angelo Belchior e essa é uma classe de comunicação com uma api do github). á tentei usar todo tipo de PCL disponível e sempre aparece esse erro.Poderia me ajudar?

    Curtir

    1. Olá Victor,

      Não consegui ver a imagem do erro, mas pela sua descrição, experimente verificar quais plataformas a PCL “Shared” está referenciando. Pois os targets dessa PCL devem ser iguais ao da PCL que está recebendo a referência.

      Espero ter ajudado.

      Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s