Desenvolvimento Web com .Net – MVC x WebForms

Olá pessoal, o debate MVC x WebForms se tornou muito popular e pretendo abordar o tema aqui também.

Ambas tecnologias são para desenvolvimento Web.

ASP.Net WebForms:

  • Existe desde 2001 (foi o primeiro modelo de desenvolvimento Web com .Net)
  • Tomou o lugar do ASP3 (a maioria dos sites migraram de ASP para ASP.Net)
  • É até hoje o modelo mais utilizado em desenvolvimento ASP.Net.

O WebForms facilitou muito a vida de quem trabalhava com WindowsForms ou VB6, segue o conceito de “drag and drop”, controles muito ricos como o GridView por exemplo com um simples arrastar e soltar.

O WebForms faz sozinho boa parte do trabalho de desenvolver para Web:

  • Gera HTML e JavaScript sozinho.
  • Controla o estado dos controles (postback / viewstate)
  • Os controles fazem praticamente tudo que precisa sem programação extra.

Com tudo isso temos uma boa lista de prós para o WebForms:

  • É RAD (Muito rápido de desenvolver).
  • Controles ricos.
  • HTML e JavaScript automático. “sem necessidade de programar”.
  • Gerenciamento do estado abstraído.
  • Designer Visual.

Mas também temos os contras:

  • Não se tem muito controle do HTML e JavaScript gerado.
  • Alguns controles não estão em conformidades com o W3C.
  • Difícil integração com frameworks JavaScript.
  • A UI (user interface) é quase impossível de se testar.
  • Problemas para utilizar SEO
* Muitas melhorias ocorreram na versão 4.0 do WebForms.

Para entendermos melhor as diferenças vamos fazer uma comparação.

ASP.Net MVC:

  • Segue o padrão arquitetônico de Model View Controller.
  • Faz separação de responsabilidades (cada letra de MVC com a sua).

Para esclarecer, o conceito do MVC não foi criado pela Microsoft (foi pela Xerox em meados de 70), porém foi muito bem adotado e revitalizado.

Quais os prós de se usar MVC:

  • Separação de responsabilidades (cada camada com a sua).
  • Testabilidade.
  • Reusabilidade.
  • Escalabilidade.
  • Manutenção facilitada.
  • Total controle do HTML e JavaScript gerado.
  • Suporta TDD em todos os apectos.

Muito bom né? Agora vamos aos contras:

  • Não é tão RAD quanto o WebForms.
  • Não disponibiliza controle prontos “drag and drop” (mas existem muitos free).
  • A curva de aprendizado é maior, há mais coisas para aprender.
  • Mais coisas para controlar, por ex, sessão de usuário.
  • É necessário desenvolver mais código.

Certo, já deu para balancear?
O que o MVC tem em comum com WebForms:

  • Ambos são ASP.Net (rodam sob o mesmo runtime).
  • Geram páginas ASPX.
  • Rodam no IIS.
  • Acessam dados livremente (ADO.Net, LINQ, Entity Framework).
  • São desenvolvidos no Visual Studio (para MVC é necessário baixar um complemento dependendo da versão do Visual Studio).

Acredito que com base nesses conceitos e diferenças já dá para ter uma ideia de qual abordagem é mais indicada para determinados projetos.

Muitos estão afirmando que o WebForms virou o ASP3 (clássico) ou seja está caindo em desuso. “Quando muitos gurus da tecnologia começam a fazer esse tipo de afirmação a tendência é que se torne uma verdade.”

Afinal qual dos dois escolher para meu próximo sistema Web?

Desenvolver um sistema Web, ASP.Net, desenvolvido em WebForms, na maioria das vezes pode (e vai) atender meu cliente, o que me motiva escolher MVC já que o esforço de desenvolvimento é maior?

As maiores vantagens são:

  • Controle total do HTML e JavaScript gerado.
    Seu site não vai ter o CSS quebrado ou uma função JS desconhecida gerada pelo   ASP.Net. Além de facilitar a compatibilidade com os browsers.
  • Possibilidade de testar a UI
    No WebForms isso é quase impossível, uma vez que não conhecemos o código que ele irá gerar. Para quem usa TDD é essencial ter todas as camadas testadas.
  • Reaproveitamento de código
    O código que é gerado com MVC é seu, você o conhece e o reaproveita onde quiser.
  • Aperfeiçoamento no conhecimento de CSS, HTML e JavaScript.
    Essas tecnologias por mais que bem conhecidas estão em alta, novidades como Windows 8, HTML 5 e o conceito da “Nova Web” são baseadas no uso destes conhecimentos, não dá mais para deixar de lado.

Até então todos desenvolvedores ASP.Net eram adeptos ao WebForms, logo nem sempre encontramos profissionais experientes em MVC (que já está na versão 4).

Cenário:
Você tem um projeto de um sistema web para fazer, o prazo é curto, o sistema não exige uma interface rica e customizada (ainda mais se for uma intranet) e sua equipe não tem conhecimento de MVC, vá de WebForms, não é nesse momento que deverá colocar em prática o aprendizado do MVC.

Eu mesmo gosto do WebForms (assim como já gostei muito de ASP3), trabalhei anos com ele, migrei para o MVC e aos poucos estou convertendo projetos para essa tecnologia.

Minha dica é:
Aprenda! Não deixe de aprender, experimente fazer um projeto em MVC, com o tempo e conhecimento a produtividade volta ao normal, e mais, você se manterá atualizado (MVC já é um pré-requisito para muitas vagas de desenvolvimento).

Por hoje é isso…
Pretendo continuar esse assunto abordando um novo conceito, chamado até então de “Nova Web”. Aguardem.

Quer compartilhar sua experiência? Tirar dúvidas? Utilize os comentários 😉

Referências:

C# – Para Iniciantes – Parte 4 – Operadores Ternários

Olá Pessoal, O que são Operadores Ternários e como utilizá-los?

O operador ternário é bem simples, serve para validar uma condição (if / else) dada a condição retorna um true ou false.

Mas por que chama-se operador ternário?
Vamos lá:

Temos três tipos de operadores

  • Relacionais (==, !=, >,  <,  >=,  <=)
  • Lógicos (&&, ||, !)
  • Ternários.

Os operadores ternários são formados por três operandos (por isso chama-se ternário), e são separados pelos sinais ? e conforme estrutura abaixo:

condicao ? valor_se_verdadeiro : valor_se_falso

A condição é testada, caso verdadeira é retornado o valor_se_verdadeiro, caso a condição seja falsa é retornado o valor_se_falso.

    int valor1 = 10;
    int valor2 = 15;

    bool resultado = valor1 == valor2 ? true : false;

    // O Resultado foi: False.

Se não existisse o operador ternário como seria escrita essa validação?

    int valor1 = 10;
    int valor2 = 15;

    bool resultado;

    if (valor1 == valor2)
    {
        resultado = true;
    }
    else
    {
        resultado = false;
    }

    // O Resultado foi: False.

É uma economia de linhas de código e tanto não acham? 😉

Ahhh, um amigo meu de Visual Basic disse que em VB se faz com “IIf”.
Calma lá! muito cuidado com o IIf no VB, apesar dele fazer o mesmo trabalho ele não é um operador ternário, é uma função. O VB não possui esse operador.

Cuidado por que? Como trata-se de uma função, independente da sua condição os dois valores (true ou false) serão testados, ou seja, se for passado um tipo inválido teremos um erro em tempo de execução. Evitem o IIf do VB.

Como o papo aqui é C#, espero que tenham gostado, como puderam ver é muito fácil usar o operador ternário, acontece no começo de esquecer a sintaxe, nesse caso voltem aqui para relembrar 🙂

Até a próxima.

C# – Para Iniciantes – Parte 3 – Expressão Lambda

Olá Pessoal, Como utilizar uma Expressão Lambda?

De início elas podem assustar um pouco quem não as conhecem, mas basta entender o conceito para transformá-las em grandes aliadas no desenvolvimento de código bonito 😉

As expressões lambda foram introduzidas no .Net para dar suporte as consultas LINQ.

“LINQ – Language Integrated Query, foi introduzido no framework 3.5 para realizar consultas diretas a base de dados ou documentos XML, coleções de objetos e qualquer outra estrutura de dados. Sua sintaxe é parecida com a linguagem SQL”

As expressões lambda se comportam como um tipo de delegate (falaremos dele em breve). Entendemos que a expressão lambda é uma espécie de função, porém sem nome, elas realizam cálculos, filtros, e retornam um valor (ou uma coleção de valores).

Para criar uma expressão lambda é necessário fazer uso do operador lambda “=>” que podemos entender como “Vai para”.

Uma expressão lambda sempre consiste de duas partes (esquerda e direita) separadas pelo  “=>”. A parte à esquerda do “=>” contém uma lista de argumentos (de tipo não necessariamente definido, pois os tipos podem ser automáticamente indicados pelo compilador). O lado direito contém as instruções.

Esta é uma expressão lambda (linha 2):

    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    int oddNumbers = numbers.Count(n => n % 2 == 1);

O que está sendo feito?
Note que foi criado um Array de inteiros e atribuído a ele alguns elementos numéricos.
A expressão lambda está retornando os elementos do Array que são impares.

Como? Vamos ler da seguinte forma:
Está sendo retornado um array com apenas os números que satisfazerem a expressão   “n % 2 == 1”, nesse caso foram 5 dos 10 elementos numéricos.

Para quem não sabe x % y significa x módulo y, ou seja, o resto da divisão de x por y, qualquer número impar dividido por 2 resta 1, é assim que validamos números impares.

No final o método count totalizou os impares do array que foi retornado da expressão lamba.

Achou difícil? Vamos tentar esta:

    // O var é uma forma de declarar uma variável que irá assumir o tipo do dado que lhe for atribuido.
    var SelecoesMundiais = new ArrayList(new string[] {"USA", "Africa", "Mexico", "Brasil" });

    // Primeira forma de fazer um filtro usando WHERE
    var MelhorSelecao =
            from string p in SelecoesMundiais
            where p == "Brasil"
            select p;

    // Segunda forma de fazer um filtro usando WHERE
    var MelhorSelecao2 = SelecoesMundiais.Cast<string>().Where(p => p == "Brasil");

    // Aqui estamos fazendo a mesma coisa sem utilizar expressão lambda
    List<string> MelhorSelecao3 = new List<string>();

    foreach (var Selecao in SelecoesMundiais)
    {
        if (Selecao == "Brasil")
        {
            MelhorSelecao3.Add(Selecao.ToString());
        }
    }

Precisamos assumir que é mais fácil (e prático) usar expressões lambda 🙂
O último exemplo usando ForEach atende também, mas a quantidade de variáveis e de linhas de código é maior.

Segue mais um exemplo, a ideia desse código é receber uma lista com nomes duplicados, filtrar de forma que não se repitam e converter o nome para UPPER CASE.
Repare que esta sendo chamada uma função externa dentro de uma expressão lambda:

    List<string> ListaNomesDistintos = new List<string>();

    List<string> ListaNomes = new List<string>();

    // Adicionando nomes à lista
    ListaNomes.Add("Eduardo");
    ListaNomes.Add("Enzo");
    ListaNomes.Add("Edna");
    ListaNomes.Add("Juliana");
    ListaNomes.Add("Eduardo");
    ListaNomes.Add("Enzo");

    // Atribuindo para nova lista o retorno dos dados tratados pelo Distinct.
    // O Distinct no LINQ assim como no SQL é responsável por eliminar duplicações de informação.
    ListaNomesDistintos = ListaNomes.Distinct().ToList();

    // Utilizando o ForEach genérico com uma expressão lambda.
    // Basicamente está pegando cada elemento e jogando dentro da função TransformaUpperCase.
    ListaNomesDistintos.ForEach(n => TransformaUpperCase(n));

    // Aqui você pode verificar que os nomes não estão duplicados e foram transformados em UPPERCASE.
    public void TransformaUpperCase(string nome)
    {
        MessageBox.Show(nome.ToUpper());
    }

Com esse exemplo podemos entender o quanto podemos explorar a capacidade das expressões lambda.

Esse post é apenas uma pequena amostra dos recursos, recomendo a vocês que deixem as expressões lambda fazerem parte de seus códigos, as vantagens são diversas.
Pretendo mostrar a utilização de expressão lambda em cenários mais complexos em um próximo post.

Utilizem os comentários para tirar dúvidas 🙂

Referências:

C# – Para Iniciantes – Parte 2 – For – Foreach – While

Olá Pessoal, Como fazer Laço de repetição em C# dos tipos For – Foreach – While?

Se você não sabe ou tinha dúvida, vamos aprender hoje!
Os laços de repetição estão presentes desde as primeiras linguagens e até hoje são extremamente utilizados, basicamente o laço repete um bloco de instruções até que uma condição seja satisfeita.
Vamos lá:

A simulação de código foi feito em um projeto Windows Application.

Laço FOR

    for (int i = 0; i <= 10; i++)
    {
        MessageBox.Show("6 x " + i.ToString() + " = " + (i * 6).ToString());
    }

Leitura:
Para i (inteiro) igual a 0 até i menor igual a 10 acrescente i+1

Simples né?
Podemos fazer um For inverso, onde ele começa de um maior e regride:

    for (int i = 11 - 1; i >= 0; i--)
    {
        MessageBox.Show("6 x " + i.ToString() + " = " + (i * 6).ToString());
    }

Esse tipo de For é útil quando temos um Array de valores onde sabemos o tamanho total dele.

Laço FOR EACH

    foreach (Control item in this.Controls)
    {
        MessageBox.Show(item.Name);
    }

Funciona um pouco diferente, é muito utilizado para varrer tipos de objetos que estão contidos em uma coleção (array de objetos).

Por ex, neste código foi criado um item do tipo Control (controle de formulário tipo button, label). Esse item a cada laço do ForEach recebe um elemento da coleção de todos os controles do formulário.

Laço WHILE

int div = 1000;

while (div != 3)
{
     div = div / 2;
     MessageBox.Show("valor de número é: " + div.ToString());
}

Leitura:
Enquanto (condição esperada não ocorre) faça:
Em determinado momento a variável div sendo dividida por 2 vai ser igual a 3 e satisfará a condição do While, enquanto isso não ocorrer o laço continuará em Loop.
PS – Cuidado com o laço While, cometer um erro que resulta em loop infinito é fácil, nesse caso basta alterar para while (div != 2) e teremos um loop infinito 😉

Laço DO WHILE

    int num = 10;

    do
    {
        num += 5;
        MessageBox.Show("valor de número é: " + num.ToString());
    }
    while (num > 100);

É a mesma ideia do primeiro While, o que muda é que no primeiro a condição é testada no começo do laço e no Do While, é testada no final do laço. Isso é importante dependendo do que precisar fazer.

Essas são as estruturas de laço de repetição que temos no C#, procure memorizar e entender para qual cenário cada um é mais adequado.

Logo mais abordarei Expressões Lambda, que em determinados momentos podem substituir o uso de um ForEach.

Utilizem os comentários para tirar dúvidas.
Até a próxima.

C# – Para Iniciantes – Parte 1 – Variáveis, Passagem por Valor ou Referência.

Olá Pessoal, Vou fazer uma série sobre (C Sharp) C# para iniciantes.

Atendendo à diversos pedidos vou procurar abordar de uma forma diferente a transferência de conhecimentos nessa linguagem, apostila e tutorial tem de monte na internet, a intenção não é essa, vamos abordar necessidades reais de quem quer dar os primeiros passos em C# e agora quer aprender mais.

Só para começar, um pouquinho de história:
O C# é uma linguagem derivada do C++, mas também tem base em Java e Object Pascal.
Criada em meados de 1999 por Anders Hejlsberg (pai do Turbo Pascal e Delphi) vem desde 2001 ganhando espaço e se tornou uma das linguagens mais populares da atualidade.

Vamos dar o primeiro passo:

Variáveis

Toda variável é uma alocação de uma quantidade de memória, é nesse espaço de memória que está armazenado o conteúdo da variável, internamente uma variável possui um ponteiro, o ponteiro para o sistema operacional é um endereçamento físico de memória, serve para localizar onde está armazenado tal dado.

A declaração de variável em C#:

Tipo NomeDaVariavel;

int MeuInteiro; 

Deve-se sempre inicializar uma variável:

int MeuInteiro = 0; 

Stack e Heap

O gerenciamento da memória no C# é feito em duas áreas de memória, o Stack e o Heap.

O Stack é uma área bem pequena de memória (alguns KB) e funciona no formato de pilha.

Pilha é uma estrutura de dados em que a inserção e a remoção de elementos de uma sequência se faz pela mesma extremidade, geralmente designada por topo da pilha”

Ou seja, o último que entra na pilha é o primeiro que sai (LIFO – Last-In-First-Out)
Qualquer dado inserido na Stack é automaticamente retirado automaticamente após a conclusão do processo que a alocou, isso livra o programador de se preocupar com isso.
Quando a Stack atinge seu tamanho máximo temos um problema muito conhecido como “stack overflow”. Os dados armazenados na Stack são chamados de “Value Types”.

A Heap é uma área de memória bem grande, diferente da Stack que é pequena, seu tamanho muda dinamicamente conforme o uso, a Heap é acessada indiretamente, por meio de referência, por isso chamamos os dados da Heap de “Reference Type”.
Existe um processo chamado Garbage Collector (GC) que é responsável pela limpeza desta área de memória.

O custo de se criar um objeto na Heap é muito maior do que na Stack, sendo assim na área de memória Stack nós temos os Value Types a seguir:
Tipos numéricos (int, long, short etc), ponto flutuante (float, double), decimal, booleanos (true e false) e estruturas definidas pelo usuário (struct).

Na Heap nós temos os Reference Types do tipo: Classes, Interfaces e Delegates.

As características dos tipos alocados em cada uma dessas áreas são as seguintes:

Value Types:

  • Uma variável deste tipo contém o valor, e não um endereço de referência para o valor;
  • Derivam de System.ValueTypes;
  • Variáveis de escopo local precisam ser inicializadas antes de serem utilizadas;
  • Atribuir o valor de variável a outra, implicitamente, é feita uma cópia do conteúdo da variável. Sendo assim, qualquer alteração no conteúdo de uma delas, não afetará a outra. Quanto maior for um objeto deste tipo mais custosa será sua cópia.

Reference Types:

  • Uma variável contém a referência (ou endereço) para o objeto que está na Heap;
  • Atribuir o valor de uma variável para outra faz uma cópia da referência, e não do próprio objeto. Ou seja, não é feita a cópia do objeto, e sim do endereço de memória do objeto, o que não gera muito custo para objetos grandes;
  • São alocados na Heap e seus objetos são coletados pelo Garbage Collector;
  • São passados por referência, enquanto que Value Types são passados por valor. Ou seja, a alteração de um objeto afetará todas as instâncias que apontam para ele.

Boxing e Unboxing

Boxing é o processo de converter um “Value Type” para o tipo de object ou a qualquer tipo de interface implementada por este tipo de valor “Reference Type”.

Unboxing extrai o “Value Type” do objeto. Transforma um objeto em um tipo simples.

      // Vamos fazer um Boxing
      int i = 123;
      object obj = i;

      // Agora vamos fazer Unboxing
      obj = 123;
      i = (int)obj;

Simples né?

O Garbage Collector (GC)

Como na Heap todos objetos são referenciados, o GC verifica se existe alguma variável fazendo referência a determinado objeto, caso não encontre ele desaloca “Coleta” aquela área de memória.

Um fato interessante, por mais que se chame o Garbage Collector a sensação que temos é de que ele irá entrar em ação no mesmo instante, mas não, estamos apenas sinalizando a ele. “Passe por aqui GC”.

Não é recomendado chamar manualmente o GC, deixe com que ele trabalhe de sua forma.
Abaixo estamos chamando o GC, porém sinalizando para que ele aguarde o trabalho em memória terminar:

      GC.Collect();
      GC.WaitForPendingFinalizers();

Passagem de Valor ou por Referência

Dada as funções:

      public void FuncaoPorValor(int numero)
      {
          numero = 10;
      }

      public void FuncaoPorReferencia(ref int numero)
      {
          numero = 10;
      }

A única diferença entre as duas é que uma trata a variável “numero” passada por valor e a outra trata a variável “numero” por referência.

Observemos os resultados:

      int variavel = 0;
      FuncaoPorValor(variavel);

      MessageBox.Show("Resultado = " + variavel.ToString());
      // Resultado = 0 Foi passada uma cópia da variável pro método.

      int variavel2 = 0;
      FuncaoPorReferencia(variavel2);

      MessageBox.Show("Resultado = " + variavel2.ToString());
      // Resultado = 10 Foi passada a referência da variável pro método.

Normalmente quando passamos uma variável para uma função, estamos passando uma cópia dela para a função trabalhar.
Caso essa cópia seja modificada a original permanece igual.

Quando passamos a variável por referência, um ponteiro de memória está sendo passado, ou seja, caso seja modificada a própria variável está sendo alterada, pois o ponteiro de memória aponta para a alocação original.

E por hoje ficamos por aqui.
Espero que aproveitem e em caso de dúvidas podem postá-las nos comentários.

Referências:

LightSwitch – Um jeito simples de criar aplicações modernas para empresas.

Olá pessoal, trago hoje mais uma novidade da Microsoft, o LightSwitch 2012

Todas as empresas atendem um determinado negócio e hoje em dia é praticamente impossível imaginar que não exista um sistema apoiando o controle do negócio ou pelo menos parte dele.

Desde a papelaria da esquina até um banco, todas empresas necessitam de um sistema, seja ele de apoio aos negócios ou de controle (estoque por exemplo).

As empresas possuem esta necessidade, é vital para seu funcionamento, mas nem sempre estão dispostas a investir financeiramente para adquirir um sistema moderno sob encomenda, tão quanto esperar aqueles meses de projeto para que fique pronto.

Resultado:
Sistemas Access, planilhas Excel, Softwares de prateleira ou até aquele sistema em VB5 que o vizinho tinha desenvolvido uns 10 anos atrás.

Em minha experiência com sistemas já presenciei diversos cenários, um dos mais intrigantes foi estar em um departamento de um banco de grande porte onde todo o processo era controlado por um sistema chamado “Planilhão”. O planilhão fazia tudo, controlava valores, entradas, saídas, diferenças.
Exposição à erros humanos, duplicação de informação e perda de dados era rotina.

Desenvolver um sistema sob encomenda que atenda o negócio de um determinado cliente não é barato para quem compra e não é fácil para quem faz.

Pensando nesse cenário a Microsoft inovou mais uma vez e lançou uma solução:

LightSwitch for Visual Studio

  • Desenvolva rapidamente aplicações de negócio.
  • Obtenha mais de seus dados.
  • Surpreenda os usuários finais.
  • Estenda sua aplicação sem redesenhá-la.

O LightSwitch é 100% RAD (Rapid Application Development).
Disponível para download no Visual Studio 2010, parte do Visual Studio 2012.
Cria automaticamente toda a estrutura (telas, CRUD, pesquisas, visualizações).
O único código que é escrito é a regra de negócios. Possui a facilidade de acompanhar o crescimento do sistema sem maiores manutenções.
Pode ser hospedado no Windows Azure 🙂

Arquitetura:

Arquitetura LightSwitch

Desenvolvedores tem em mãos com LightSwitch uma oportunidade de gerar novos negócios, pois possibilita o rápido desenvolvimento de sistemas, em conjunto com o Entity Framework todas as Entidades são criadas com base na modelagem de dados.

Não tem mais desculpa para usar o velho “planilhão” agora 🙂

Curioso para experimentar?
Abaixo uma série de vídeos passo-a-passo que irá prover todo o suporte necessário para se ambientar com a nova ferramenta:
(Conteúdo oficial Microsoft – Em Inglês) 

1 – How Do I: Define My Data in a LightSwitch Application?
(6 minutos 55 segundos)

2 – How Do I: Create a Search Screen in a LightSwitch Application?
(8 minutos, 58 segundos)

3 – How Do I: Create an Edit Details Screen in a LightSwitch Application?
(5 minutos, 15 segundos)

4 – How Do I: Format Data on a Screen in a LightSwitch Application?
(12 minutos, 52 segundos)

5 – How Do I: Sort and Filter Data on a Screen in a LightSwitch Application?
(9 minutos, 44 segundos)

6 – How Do I: Create a Master-Details (One-to-Many) Screen in a LightSwitch Application?
(9 minutos, 15 segundos)

7 – How Do I: Pass a Parameter into a Screen from the Command Bar in a LightSwitch Application?
(11 minutos, 44 segundos)

8 – How Do I: Write business rules for validation and calculated fields in a LightSwitch Application?
(15 minutos, 55 segundos)

9 – How Do I: Create a Screen that can Both Edit and Add Records in a LightSwitch Application?
(7 minutos, 30 segundos)

10 – How Do I: Create and Control Lookup Lists in a LightSwitch Application?
(7 minutos, 24 segundos)

11 – How Do I: Set up Security to Control User Access to Parts of a Visual Studio LightSwitch Application?
(23 minutos, 52 segundos)

12 – How Do I: Deploy a Visual Studio LightSwitch Application?
(20 minutos 24 segundos)

13 – How Do I: Deploy a LightSwitch Application to Azure?
(12 minutos, 41 segundos)

14 – How Do I: Modify the Navigation of Screens in a LightSwitch Application?
(04 minutos, 19 segundos)

15 – How Do I: Open a Screen After Saving Another Screen in a LightSwitch Application?
(08 minutos, 41 segundos)

16 – How Do I: Connect LightSwitch to an Existing Database?
(15 minutos, 20 segundos)

17 – How Do I: Connect LightSwitch to SharePoint Data?
(15 minutos, 26 segundos)

18 – How Do I: Save Data from Multiple Data Sources on the Same Screen?
(07 minutos, 19 segundos)

19 – How Do I: Set Default Values on Fields when Entering New Data?
(03 minutos, 21 segundos)

20 – How Do I: Copy Data from One Row into a New Row?
(07 minutos, 18 segundos)

21 – How Do I: Add Commands as Buttons and Links to Screens?
(08 minutos, 15 segundos)

22 – How Do I: Show Multiple Columns in an Auto-Complete Dropdown Box?
(02 minutos, 39 segundos)

23 – How Do I: Create Custom Search Screens in LightSwitch?
(18 minutos 22 segundos)

24 – How Do I: Handle Database Concurrency Issues?
(14 minutos 12 segundos)

O objetivo desse post é divulgar a novidade, em breve postarei mais conteúdo como exemplos, códigos e dicas.

Downloads:

Saiba mais em: