quarta-feira, 27 de março de 2019

Como criar um servidor na nuvem pelo Microsoft Azure

Por Luciano Gusso em 25/03/2019 no site Profissionais TI

Resultado de imagem para servidor na nuvem
Vale Cloud

Como muitos sabem, hoje um grande aliado para as empresas em geral é trabalhar com o auxilio da computação em nuvem.
Não vou entrar na parte teórica da nuvem, pois este assunto já foi bastante abordado aqui no PTI, mas, resumindo, dentre as principais vantagens de estar utilizando a nuvem está a economia que a mesma proporciona, pois a empresa pode reduzir custos de mão-de-obra e também em infraestrutura. Outra grande vantagem está ligada a questão de mobilidade, flexibilidade e disponibilidade, onde o colaborador pode estar trabalhando tanto na empresa como também em home office. Há também o fator de desempenho que a infraestrutura na nuvem oferece e o mais importante: segurança, pois as empresas que oferecem estes recursos dispõem de altos níveis de segurança das informações.
Bom, neste artigo irei demonstrar como criar um servidor básico na nuvem e como acessá-lo via conexão remota.
Exitem várias empresas que oferecem o serviço de Cloud Computing, porém, a que melhor me adaptei em estar trabalhando é com o Microsoft Azure.
Para isso, vamos estar acessando o site do Microsoft Azure clicando aqui.
Para quem não possui uma conta no Microsoft Azure, pode estar clicando em “Start free” para criar uma conta gratuita e então testar todas as funcionalidades do serviço.
CloudServer01
Na tela seguinte iremos novamente clicar em “Start free” para podermos criar uma conta com o e-mail que disponibilizamos.
CloudServer02
Com a conta gratuita criada, abrirá a página do Azure com todos os recursos disponibilizados. Como criamos uma conta gratuita, teremos o valor de US$ 750.00 para testar os recursos disponíveis.
Como queremos criar um servidor, o primeiro passo é clicar em “Máquinas Virtuais”, que está dentre as opções na coluna da esquerda ou clicando no ícone no parte superior da página que é o espaço destinado aos serviços mais utilizados.
CloudServer03
Dentro de “Máquinas virtuais”, iremos clicar em “Adicionar”, que está como primeira opção na parte superior da tela, ou podemos clicar também em “Criar máquina virtual”, situado na parte inferior da página.
CloudServer04
A primeira guia que aparecerá em máquina virtual é “Básico” que se refere as opções de recursos, nome, tamanho e localização do Servidor. 
A primeira opção que devemos fazer é referente ao campo “Grupo de recursos”, o qual devemos clicar em “Criar novo”.
Neste exemplo iremos colocar “RecursosVM”, que deve ser preenchido sem espaços e sem caracteres especiais, e em seguida clicar em “OK”.
CloudServer06
O próximo passo é  preencher os campos referentes aos detalhes da instância. Aqui no caso foi deixado o nome da VM como “CloudServer”, em seguida a região onde estará localizado o servidor, que aqui no caso foi deixado em “Leste dos EUA”. Nesta opção, dependendo da região pode ser que não tenha disponibilizada a imagem do sistema operacional que se deseja usar.
Em “Opções de disponibilidade” iremos deixar como nenhuma infraestrutura para redundância, já que estamos criando um servidor simples.
Dentro da opção de imagem, aparecerá os servidores mais comumente utilizados e que neste caso iremos escolher o “Windows Server 2016 Datacenter”.  Se quisermos ver todas as imagens disponíveis, basta clicar em “Procurar todas as imagens e discos”.
CloudServer07
Na próxima opção escolhemos o tamanho da imagem, o qual adiciona a CPU utilizada e memória. Por padrão, ficou a versão Standard, mas podemos escolher outro tamanho como também terá os valores de cada um.
CloudServer08
Na sequência criamos a conta do administrador, o qual poderá logar e ter acesso a todos os recursos do servidor.
Então colocamos o nome do administrador e a senha. Lembrando que a senha terá que ter no mínimo 12 caracteres e ter um nível forte de complexidade.
CloudServer09
A seguir teremos que escolher as portas de entrada deste servidor. Como estaremos utilizando o Windows Server, iremos selecionar a porta via RDP (Remote Desktop Protocol), ou seja, acessaremos via conexão remota. Se estivéssemos escolhendo um Linux como servidor, escolheríamos a porta SSH.
CloudServer10
Em seguida, caso já tenha comprado a licença do Windows Server, marque como sim e coloque o serial. No caso aqui, como não temos licença, deixaremos como não.
Como são as opções básicas para a criação da máquina virtual, poderíamos apenas clicar em “Revisar + criar” para criar esta VM, mas iremos revisar todas as opções das outras guias. Então clicaremos em “Avançar discos”.
CloudServer11
Em “Discos” podemos escolher SSD ou HD. Como é indiscutível a velocidade do SSD, iremos deixar selecionada esta opção. Se quisermos anexar mais discos ao servidor só precisamos  clicar em “Criar e anexar um novo disco” e em seguida clicar em “Avançar Rede”.
CloudServer12
Em opções de rede só iremos revisar como está. Se quisermos, podemos estar modificando a segurança dos adaptares de rede, mas como aqui estamos trabalhando com o básico, iremos clicar em ” Avançar Gerenciamento”.
CloudServer13
Como fizemos em rede, aqui também só vamos rever as opções e clicar em “Avançar configuração de convidado”.
CloudServer14
Nesta guia também iremos só revisar e clicar em “Avançar marcas”, pois, não vamos adicionar nenhuma extensão para automação.
CloudServer15
A guia Marcas é utilizada quando quer filtrar por recursos. É uma forma de se manter organizado para controlar o servidor dentro do Azure. Como não iremos criar nenhuma marca, iremos clicar em “Avançar em Revisar + criar”. 
CloudServer16
Na guia “Revisar + criar” aparecerá o resumo de todas as opções configuradas e após revisar clicaremos em “Criar”.
CloudServer17
Iremos reparar que abrirá no canto superior direito uma pequeno quadro informativo que está inicializando a implantação.
CloudServer18
Em seguida aparecerá na tela informações do andamento da implantação e o tempo previsto para finalizar.
CloudServer19
Com a implantação concluída, iremos clicar em “Ir para o recurso”.
CloudServer20
A seguir, aparecerá o painel de controle do nosso servidor, onde podemos gerenciá-lo. Podemos, por exemplo, adicionar discos, alterar opções de rede e segurança entre outras opções.  
Dentro da opção visão geral, teremos informações como localização do servidor e endereço de IP público, o qual iremos utilizar para acessar o servidor pelo aplicativo de conexão remota do Windows.
CloudServer21
Caso queira uma maneira mais simples e rápida de se conectar ao invés de abrir o aplicativos de conexão remota, neste painel da visão geral clicaremos em “Conectar”, onde aparecerá uma nova janela no lado direito do painel e então clicaremos em “Baixar arquivo RDP”. 
Neste arquivo que irá baixar, clicaremos nele para abrir a janela para conexão.
CloudServer22
Na janela que aparece, iremos clicar em “Conectar” para acessar o servidor pelo seu endereço IP através da porta 3389 que é a destinada a porta RDP.
CloudServer23
Aparecerá a janela para digitar as credenciais do administrador do servidor. Clicaremos em “Mais opções” para selecionar outro usuário.
CloudServer24
Em seguida clicaremos em “Usar uma conta diferente” e colocaremos o usuário e login referente ao administrador cadastrado no Azure.
CloudServer25
Na janela seguinte, clicaremos em “Sim”.
CloudServer26
E então teremos acesso ao Servidor, onde poderemos configurar seus softwares e armazenamentos conforme a escolha da empresa.
CloudServer27
Se clicar em Local Server entre as opções na coluna da direita, iremos poder ver as informações como grupo de trabalho, nome do servidor, configurações do processador e memória.
CloudServer28
Acho que é isso pessoal! É claro que agora tem que configurar o servidor para uso conforme suas necessidades, mas a intenção aqui foi demonstrar um servidor básico na nuvem.
Até a próxima.

Não reinvente a roda! Utilize componentes prontos no desenvolvimento da sua aplicação

Por André Lima em 15/02/2017

Resultado de imagem para componentes de desenvolvimento C#
Embarcados

Muitos desenvolvedores não sabem da existência de bibliotecas comerciais e acabam constantemente “reinventando a roda” na hora de desenvolver as suas aplicações. Eu mesmo, lá por volta de 2005, no começo da minha carreira, não conhecia tais bibliotecas e pacotes de componentes. Ou seja, eu desenvolvia as aplicações da pequena empresa onde eu trabalhava utilizando os componentes nativos do Windows Forms.
Foi só depois de participar de uma mesa redonda no TechEd (em 2006, se não me engano) que eu ouvi falar da DevExpress e fui pesquisar exatamente o que ela tinha a oferecer. Começamos a utilizar os componentes de avaliação e a produtividade foi às alturas. Não dá para comparar a quantidade de funcionalidades disponíveis nos controles de bibliotecas comerciais com as funcionalidades dos controles nativos do .NET Framework.
É justamente por causa desse grande impacto que essa simples informação fez no desenvolvimento das nossas aplicações que eu quero compartilhar com você as 4 principais empresas que desenvolvem bibliotecas de componentes para aplicações .NET (entre outras plataformas).
Edit: depois de publicar e divulgar este artigo, várias pessoas me lembraram nos comentários (tanto aqui quanto no Facebook) da SyncFusion! Eu realmente tinha esquecido da SyncFusion, que tem até uma licença gratuita “Community” (como o Visual Studio) para desenvolvedores individuais e empresas que faturem menos que $1 milhão por ano.
Só para deixar claro, não existem somente essas empresas que vendem componentes prontos para o desenvolvimento de aplicações .NET. Essas são, na minha opinião, as 4 empresas mais conhecidas do segmento. Caso você utilize componentes de alguma outra empresa, deixe o seu comentário no final do artigo.
Ah, outro detalhe: esse não é um post patrocinado. Ou seja, não estou ganhando absolutamente nada dessas empresas para fazer essa divulgação. Só estou divulgando porque, como falei anteriormente, essa informação teve um grande impacto nas aplicações que desenvolvemos dali para a frente.

DevExpress

A DevExpress foi a primeira empresa desse ramo que eu tive contato. Na empresa onde eu trabalhava na época eu baixei os componentes de avaliação e fiquei maravilhado com as suas funcionalidades. O destaque vai para o famoso grid, que possui nativamente as funcionalidades de ordenação, remoção e adição de colunas, filtros, mestre/detalhe, drilldown, agrupamentos, entre outras:
E não é só o grid que faz sucesso. O pacote de componentes da DevExpress conta também com controles de layout (possibilitando que o usuário altere o layout das telas e salve para a próxima execução), gráficos, ribbon, skins, entre outros. Dá uma olhada nas plataformas suportadas no momento:
E quanto é que custa tudo isso? Bom, não é barato. No momento da escrita deste artigo (fevereiro de 2017), se você for comprar as plataformas separadamente (por exemplo, só Windows Forms ou só WPF ou só ASP.NET), elas custarão entre $500 e $900, dando o direito de suporte e atualizações por um ano. Depois disso, se você quiser continuar com o suporte e novas atualizações, você tem que renovar a cada ano (por um preço menor).
Existe também a opção de você comprar os componentes de todas as plataformas .NET (Windows Forms, ASP.NET, WPF e UWP) por $1500. Por fim, tem a opção “super master blaster” onde você compra todos os componentes possíveis da DevExpress (inclusive os componentes para HTML5 e JavaScript) pela bagatela de $2200.
Fundada em: 1998
Versão Trial: 30 dias

Telerik

A Telerik é a empresa mais conhecida no meio dos desenvolvedores, uma vez que ela costuma patrocinar diversos eventos e ações da comunidade. Por exemplo, a Telerik foi patrocinadora do podcast .NET Rocks por anos e anos (hoje em dia, ironicamente, é a DevExpress que patrocina). Eu até tenho um bonequinho ninja da Telerik na minha mesa da empresa, que eu ganhei no primeiro TechEd que eu participei (a Telerik normalmente tinha estandes e patrocinava esse tipo de evento).
Um dos componentes mais conhecidos da Telerik é o seu grid, que é tão poderoso quanto o da DevExpress:
Além disso, o pacote de componentes da Telerik também conta com diversos outros controles bem interessantes, como gráficos, editor RichText, controle visualizador de PDF, etc. As plataformas suportadas também vão desde o Windows Forms até o UWP, passando por WPF, ASP.NET e Xamarin:
E o preço? No momento da escrita deste artigo (fevereiro de 2017), plataformas separadas estão saindo entre $400 e $1000, também com updates e suporte por 1 ano. Já a opção com todas as plataformas (tirando Xamarin) sai por $1500 e o pacote completo custa $2200.
Fundada em: 2002
Versão Trial: 30 dias

Infragistics

Confesso a você que logo quando eu comecei a participar de eventos da comunidade (lá por volta de 2004, 2005) eu ouvi bastante o nome “Infragistics“, mas nunca tive curiosidade sequer de procurar o que isso queria dizer. Eu tenho a impressão que as pessoas sempre reclamavam da Infragistics, mas pode ser que eu esteja errado. Com o passar dos anos eu acabei descobrindo que a Infragistics era, na verdade, mais uma empresa que desenvolvia componentes para auxiliar no desenvolvimento de aplicações.
Alguns projetos legados aqui na empresa onde eu trabalho utilizam controles da Infragistics, principalmente o grid:
Assim como as outras empresas apresentadas neste artigo, a Infragitics também suporta uma variedade de plataformas, como Windows Forms, WPF, ASP.NET, Xamarin e UWP:
Componentes de uma plataforma específica custam, no momento da escrita deste artigo (fevereiro de 2017), entre $500 e $900. Já o pacote com os componentes para todas as plataformas sai por $1500.
Fundada em: 1989
Versão Trial: 30 dias

ComponentOne

Eu confesso que tive pouca experiência com os controles da ComponentOne, mas dentre as quatro opções apresentadas neste artigo, ela parece ser a menos robusta. No passado eu cheguei a utilizar de leve os componentes de acesso a dados da ComponentOne, que permitiam o compartilhamento “fácil” de schemas de bancos de dados diferentes. Isso é primordial caso a sua aplicação tenha que rodar apontando para bancos de dados diferentes (como SQL Server e Oracle, por exemplo).
Dando uma olhada nas imagens de exemplo dos controles da ComponentOne, já dá para perceber que ele fica em uma categoria um pouco inferior quando comparamos com os controles da DevExpress, Telerik ou Infragistics. Por exemplo, veja só o grid da ComponentOne:
As plataformas suportadas são basicamente as mesmas das outras empresas:
Eu imaginei que os preços da ComponentOne seriam menores, mas não, eles ficam na casa de $900 a $1100. Existe um combo de componentes .NET desktop + web que sai por $1500 e um outro combo que inclui também os componentes HTML5, JavaScript e desenvolvimento móvel por $2000.
Fundada em: 2000
Versão Trial: 30 dias

SyncFusion

Depois de publicar e divulgar este post, diversas pessoas vieram me lembrar nos comentários sobre os controles da SyncFusion. Eu realmente tinha esquecido deles. E olha que nós usamos os ícones “metro style” da SyncFusion em um dos nossos aplicativos aqui na empresa onde eu trabalho.
A qualidade dos controles da SyncFusion é muito boa, compatível com a qualidade das outras bibliotecas apresentadas anteriormente neste artigo. Veja só um exemplo do grid da SyncFusion:
Aqui vai uma lista das plataformas suportadas atualmente:
O grande diferencial da SyncFusion é que ela possui uma edição gratuita “Community“, igual o Visual Studio. A edição é totalmente gratuita para desenvolvedores individuais e empresas que faturem menos de $1 milhão por ano. Além disso, ela oferece também as edições comerciais, que custam atualmente em média $1000 por plataforma ou $4000 para todas as plataformas.
Fundada em: 2001
Versão Trial: 30 dias
Versão Community: gratuita para desenvolvedores individuais ou empresas com faturamento até $1 milhão por ano

Concluindo

A grande mensagem que eu quero passar com este artigo é: se a sua aplicação tem uma demanda por controles complexos, não reinvente a roda! Existem diversas empresas que desenvolvem controles comerciais que podemos utilizar nas nossas aplicações, como as quatro que eu apresentei neste artigo.
Não importa qual delas você escolha, o que importa é que você não fique perdendo tempo e dinheiro desenvolvendo controles por conta própria. Faça uso desses excelentes controles desenvolvidos por terceiros, que contam com suporte e atualizações constantes.
Vamos fazer uma conta rápida aqui? Imagine que você tenha um desenvolvedor ganhando R$3000 por mês na sua empresa. Aí você pega esse funcionário e coloca ele para desenvolver uma funcionalidade extra no controle de grid do .NET. Se esse desenvolvedor trabalhar duas semanas e meia no desenvolvimento e suporte desse grid, o custo sairia basicamente o mesmo se você tivesse pago os $600, que é o que custa em média o pacote de controles para uma única plataforma das empresas abordadas nesse artigo. Não precisa nem falar o que compensa mais, não é mesmo?
Se você ainda não utiliza esses tipos de controles nos seus projetos ou na sua empresa, faça o download das versões trial, teste e veja você mesmo a quantidade de tempo que a sua empresa conseguiria reduzir no desenvolvimento das suas aplicações. Depois volta aqui e fala pra gente os resultados na caixa de comentários. E se você já utiliza ou utilizou esses ou outros componentes pagos nas suas aplicações, conta pra gente como é que foi a sua experiência também.
Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.

Entendendo o Pattern Model View ViewModel MVVM

Por Cadu em 2010 no site DevMedia

Resultado de imagem para MVVM
Medium

Inversão de controle, desacoplamento, injeção de dependência, são formas de manter um código limpo, fácil de dar manutenção e que seja organizado, nos fazendo assim entender e amadurecer no processo de desenvolvimento de software. E hoje falaremos de um pattern chamado MVVM (Model-View-ViewModel) e poderemos ver na prática alguns destes conceitos.
O MVVM é um pattern que foi criado em 2005, por John Gossman, um dos arquitetos do WPF e Silverlight na Microsoft. O MVVM assemelha-se em alguns aspectos o MVC (Model View Controller) e ao MVP (Model View Presenter), podemos até dizer que o MVVM é uma especialização do MVP adaptado para a arquitetura do WPF E Silverlight. Conceitualmente, o MVVM e o MVP são idênticos, o que os diferencia é que o MVVM é específico para a arquitetura do WPF e Silverlight e o MVP é independente de plataforma. O MVVM, visa estabelecer uma clara separação de responsabilidades em uma aplicação WPF e Silverlight, mantendo uma espécie de façade entre o Modelo de objetos ( entenda classes de negócio, serviços externos e até mesmo acesso a banco de dados ) e a View que é a interface, com a qual o usuário interage. Para entendermos melhor, como se dá esta separação e visualizar como os componentes interagem dentro deste cenário, observe a figura abaixo:
Separação das camadas
Como ilustra a figura acima, há uma clara separação das camadas. A camada Model( Modelo ) não conhece a View( Camada de apresentação ) e vice-versa, na verdade a View conhece a ViewModel e se comunica com ela através do mecanismo de binding. E são os avançados mecanismos de binding, eventos roteados e comandos roteados, que fazem do MVVM um pattern poderoso para construção de aplicações WPF e Silverlight. Talvez você esteja se perguntado: tá bom a View está ligada a ViewModel através do mecanismo de binding mais como funciona esta comunicação? Observe abaixo:
View
Veja como é simples, a View atravéz do databinding interage com a ViewModel notificando a ocorrência de eventos e o disparo de comandos. A ViewModel por sua vez, responde a esta notificação realizando alguma ação no modelo; seja obtendo alguma dado, atualizando ou inserindo informações no modelo.

Responsabilidades e características

View – A responsabilidade da View é definir a aparência ou estrutura que o usuário vê na tela. O ideal é que o codebehind da view, contenha apenas a chamada ao método InitializeComponent dentro do construtor, ou em alguns casos, código que manipule os controles visuais, ou crie animações; algo que é mais difícil de fazer em XAML. A View se liga ao ViewModel, através da propriedade DataContext que é setada para a classe ViewModel correspondente à aquela View. Veja no código de exemplo, que será disponibilizado para baixar, como é feita declarativamente a ligação da View com o ViewModel através da propriedade DataContext:

Características comuns

  • A View é um elemento visual, como um objeto Window, Page, UserControl ou DataTemplate.
  • A View referencia a ViewModel através da propriedade DataContext. Os controles da View são preenchidos com propriedades ou comando, expostos pela ViewModel.
  • O codebehind da view, define comportamentos visuais ( Behaviors ) difíceis de expressar em XAM.
ViewModel – A responsabilidade da ViewModel no contexto do MVVM, é disponibilizar para a View uma lógica de apresentação. A View Model não tem nenhum conhecimento específico sobre a view, ou como ela implementada, nem o seu tipo. A ViewModel implementa propriedades e comandos, para que a View possa preencher seus controles e notifica a mesma, caso haja alteração de estado; seja através de eventos ou notificação de alteração. A ViewModel é peça fundamental no MVVM, por que é ela quem vai coordenar as iterações da View com o Model, haja vista, ambos não terem conhecimento um do outro. E além de tudo isto, a ViewModel, também pode implementar a lógica de validação, para garantir a consistência dos dados.

Características comuns

  • A ViewModel é uma classe não visual, que expões para a View uma lógica de apresentação.
  • A ViewModel é testável, independentemente da View ou Model.
  • A ViewModel coordena as intenções entre a View e o Model.
  • A ViewModel não referencia a View, na verdade não tem nenhum conhecimento sobre a mesma.
  • A ViewModel implementa as interfaces INotifyPropertyChanged
  • A ViewModel expões propriedade e comando, para que a View possa utilizar para preencher seus controles; e notifica a View quando o estado de uma determinada propriedade muda, via implementação da interface INotifyPropertyChanged ouINotifyCollectionChanged.
  • A ViewModel pode conter a lógica de validação, através da implementação da intefaces IDataErrorInfo ou INotifyDataErrorInfo.
Model – o Model no MVVM, encapsula a lógica de negócios e os dados. O Modelo nada mais é do que o Modelo de domínio de uma aplicação, ou seja, as classes de negócio que serão utilizadas em uma determinada aplicação. O Modelo também contém os papéis e também a validação dos dados de acordo com o negócio, cuja aplicação em questão visa atender.

Características comuns

  • O Modelo são classes que encapsulam a lógica de negócios e os dados.
  • O Modelo não referencia diretamente a View ou ViewModel.
  • O Modelo provê eventos de notificação de mudança de estado, através das interfaces INotifyPropertyChanged and INotifyCollectionChanged. Isto facilita o preenchimento de dados na View.
  • O Modelo de dados contém validação de dados e reporta os erros através da interface INotifyDataErrorInfo.
  • O Modelo de dados geralmente é utilizado, com um repositório ( pode ser o Repository Pattern ) ou serviço.
O MVVM permite a você ter uma visão, da clara separação da Interface com o usuário( View ), sua lógica de apresentação (ViewModel) e os seus Dados(Model). E trabalhando desta forma, temos separação de responsabilidades, desacoplamento e conseguimos evoluir e manter melhor as nossas aplicações. Já falamos muito vamos a exemplo prático, observe a figura abaixo, e veja como ficou a nossa solução de exemplo:
view
É um projeto simples, apenas para ilustrar os conceitos mostrados no artigo. Vamos começar pela tela que lista os clientes. Veja que ao abrir o arquivo TodosClientesView.xaml.cs, você verá que o codebehind contém somente a chamada ao método InitializeComponent e nada mais; Mais ao abrir o arquivo TodosClientesView.xaml você verá que a propriedade DataContext da grid dentro do User Control, está apontando para o ViewModel correspondente a esta tela, no caso a classe TodosClientesViewModel.

TodosClientesView.xaml

TodosClientesView.xaml

TodosClientesView.xaml.cs

TodosClientesView.xaml.cs
Vemos que não há ligação da View com o Model. É a responsabilidade da ViewModel fazer esta ligação como já foi dito anteriormente, e se você observar na propriedade ItemsSource da Grid, está apontando para TodosClientes, que é justamente uma propriedade da classe ViewModel. Observe a figura abaixo:
Todos os cliente
Se você observar bem a classe TodosClientesViewModel, herda da Classe ViewModeBase; isto se dá pelo fato de que, como as classes ViewModel precisam coordenar as ações da View e reagir a iterações realizadas pelo usuário na mesma, ela precisa implementar a interface INotifyPropertyChanged. Para facilitar, é definida uma classe base que implementa a interface e as classes derivadas apenas herdam e utilizam sua implementação da interface, olhe o diagrama das classes ViewModel;
View
Note que a ViewModel da tela de cadastro de clientes, também implementa a interface IDataErrorInfo, para também poder obter os erros de validação.
E assim, vemos como fica clara a separação das responsabilidades tanto da View, ViewModel e Model. E como recursos avançados como databinding, commands e eventos roteados tornam este pattern muito poderoso e eficiente para construção de aplicações ricas. Resumindo a View conversa com a ViewModel, que conversa com o Model, ou seja, a view não conhece o model, que não conhece a view nem a viewmodel, totalmente desacoplado e de fácil manutenção. A aplicação de exemplo é simples que visa apenas deixar consolidado os conceitos deste pattern aprendido aqui.
Bom pessoal, espero ter ajudado e colaborado com o aprendizado de vocês. Vejo no MVVM, um auxilio poderoso na hora de construir aplicações ricas com boas práticas. Se você vai começar a mergulhar neste maravilhoso mundo das interfaces ricas, com certeza vai precisar desta aliado do MVVM. Um abraço e até mais.

Links Úteis

Saiba mais sobre Visual Studio ;)

  • Deploy de aplicações com o Visual Studio:
    Neste artigo veremos como realizar o deploy de aplicações .NET desenvolvidas com o Visual Studio, demonstrando o processo de instalação de aplicações web e desktop em ambiente de produção.
  • Introdução ao Visual Studio Code:
    Veremos neste artigo as principais funcionalidades do Visual Studio Code, editor gratuito e multiplataforma da Microsoft, e como criar uma aplicação ASP.NET 5 sem o Visual Studio e fazer o deploy dela para o Azure utilizando o Git.
  • Criando um Web Project : Visual Studio e C#:
    Aprenda a criar um Web Project, utilizando o Visual Studio 2010 Express e a linguagem de código C#. Tudo muito simples, para ajudar quem esta começando agora.