Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
EDITORAÇÃO E DIAGRAMAÇÃO
14:. Aplicações com “N” camadas
Adriano Almeida em ASP.Net - Parte I
COLABORADORES Aplicando conceitos de camadas em ASP.Net
Adriano Luciano Candido
Caio Azevedo Por: Felipe Pocchini
Diego Nogare
Felipe Pocchini
Fernanda Sallai 18:. Implementando Service Broker
Fúlvio Cezar Canducci Dias
Ricardo José Alves Sistema de Fila de Mensagens
Produzido por:
www.codificando.net
Editorial
Pessoal, no mês de outubro tivemos bastante novidade com relação ao Codificando .Net, não só na re-
vista, mas como um todo! Eu acredito, de verdade, que o principal fator de sucesso desta revista gratuita
são as pessoas que dedicam várias horas de seus dias para colaborar de forma voluntária para que a men-
sagem possa ser entregue em todos os cantos do país (e de fora também!). Como todos nós somos de
comunidade, nada mais justo do que buscarmos um novo membro pro time na nossa comunidade. Anali-
samos todos os candidatos, buscando o que mais havia colaborado conosco. Pra nossa alegria, o Felipe
Pocchini foi escolhido o novo membro do time.
O Felipe já chegou trabalhando bastante, apesar de originalmente ter sido “contratado” pra nos ajudar
nas revisões técnicas, ele já fez o novo layout do site da revista, e está trabalhando no layout do site dos
PodCasts.
Não menos importante que o novo membro, a galera que já está com a gente no time é de fundamental
importância para que o trabalho seja realizado da melhor forma possível. Agradeço intensamente a todos
vocês: Adriano Almeida, Fernanda Sallai, Milton Carvalhaes!
Diego Nogare
site@codificandomagazine.net
e-magazine
Neste artigo veremos como utilizar Expressões Regulares para validar e-mail e CEP
Neste artigo aprenderemos como verificar gem C#, mas é claro que poderá ser utili-
se o formato de email e ou CEP informado zado em qualquer tipo de aplicação e
pelo usuário é correto usando as expres- linguagem fazendo algumas adaptações
sões regulares. conforme sua escolha. Criaremos o la-
yout conforme a figura 1.
OBS: Estou realizando a validação através
de código gerenciado, mas é possível fazer
a mesma validação utilizando componen-
tes do próprio Visual Studio, mas isso não
será abordado neste artigo.
/// <summary>
/// Validar o formato do Ao executar o código e informar dados
CEP no formato inválido (figura 2) é exibida
/// </summary>
as mensagens (figura 3 e 4) conforme o
Fernanda Sallai
1. [0-9]{5}-[0-9]{3}
a. [0-9] – é uma lista de itens permiti-
dos. Nesse caso de números entre 0
até 9
Codificando.net e-magazine
Figura 4. Adicionando referências
Codificando.net e-magazine
Codificando.net e-magazine
Return _alerta Return _funcao
End Get End Get
Set(ByVal value As String) Set(ByVal value As String)
_alerta = value _funcao = value
End Set End Set
End Property End Property
End Class End Class
Classe Chave
Public Class Chaves
Private _chave As String
Public Sub New()
Chave = ""
End Sub
Public Property Chave() As String
Get
Return _chave
End Get
Set(ByVal value As String)
_chave = value
End Set
End Property
End Class
Codificando.net e-magazine
Public Property Funcoes() As Fun- coes.Chave, Funcoes.Funcao & ";",
cao True)
Get
Return _funcao _pagina.ClientScript.IsClientScriptBl
End Get ockRegistered(Funcoes.Chave)
Set(ByVal value As Funcao) End If
_funcao = value End Sub
End Set Public Sub EnviarFuncao(ByVal
End Property _pagina As Page, ByVal _funcao As
Public Property Pagina() As Page Funcao)
Get Funcoes = _funcao
Return _pagina EnviarFuncao(_pagina)
End Get End Sub
Set(ByVal value As Page) Public Sub EnviarFuncao(ByVal
_pagina = value _pagina As Page, ByVal _chave As S-
End Set tring, ByVal _funcao As String)
End Property Funcoes.Chave = _chave
Public Sub EnviarAlerta() Funcoes.Funcao = _funcao
EnviarAlerta(Pagina) Pagina = _pagina
End Sub EnviarFuncao()
Public Sub EnviarAlerta(ByVal End Sub
_pagina As Page) End Class
Explicarei o que cada classe faz para um executa dentro dos famosos UpdatePanel
melhor entendimento: do Ajax, ou seja, a diferença da classe Cli-
enteJs.vb e ScriptManagerJs é que a S-
Classe Chaves.vb: será uma classe de criptManagerJs você vai trabalhar junto
apoio pois, o seu motivo de existir será com o ScriptManager e o ClienteJs.vb não
que outras duas classes (Alerta e Fun- precisa.
cao) herdarão (abstração de dados: Espe-
cialização) a sua única propriedade Cha- Criaremos um novo projeto ASP.NET A-
ve. A propriedade Chave é do tipo S- JAX- Enabled Web Site onde usaremos a
tring. DLL compilada do nosso projeto JvScript
( a DLL está localizada na pasta
Classe Alerta.vb: terá as propriedades “bin\Debug\JvScript.dll”). Iremos reali-
Alerta e Chave (herança da classe Cha- zar dois testes: um rodando dentro de um
ves.vb) e as duas são do tipo String. Essa UpdatePanel e outro fora do UpdatePa-
classe será utilizada como tipo de dado nel. A figura 11 exibe o layout da página.
para as classes ClienteJS.vb e ScriptMa-
nageJs.vb (abstração de dados: Agrega-
ção).
Codificando.net e-magazine
Classe ClienteJs.vb:a classe ClienteJS.vb
terá as propriedades Pagina que é do ti- Antes de fazer as codificações nos botões vamos
po Page, e dois tipos de dados que serão fazer referenciar a nossa DLL (“JvScript.dll”).
das classes Alerta.vb e Funcao.vb respec- Veja na figura 12 a estrutura do projeto.
tivamente Alertas (do tipo de dado Aler-
ta - Classe Alerta.vb) e Funcoes (do tipo
de dados Funcao - Classe Funcao.vb).
Essa classe possuirá métodos de envio
de mensagens com várias sobrecargas de
métodos que mostrará alerta ou cha-
mará outras funções em Javascript.
Codificando.net e-magazine
(configurações intermediárias)
Presentation(Apresentação), Business
(Lógica do negócio) e Data(Responsável
pelas transações com o banco da dados).
Para este artigo, iremos usar uma camada
a mais chamada Entity(nossa biblioteca
de entidades). Vamos criar um controle Figura 2: Criando uma solução em branco.
um novo projeto do tipo Blank Solution. Esse novo projeto vai ser do tipo Class
Library, pois será apenas a biblioteca de Pronto, com o diagrama de classes aberto
entidades. vamos criar a classe Cliente de maneira
muito fácil:
Codificando.net e-magazine
al Studio chamado View Class Diagram,
responsável em gerenciar as classes do
projeto conforme mostra a figura a baixo:
Figura 8: Visualização da classe Cliente dentro do
diagrama.
Crie mais esses atributos seguindo os Para visualizar o código da entidade Cliente,
passos acima: cpf, email, id, telefone. basta dar um duplo clique na classe.
using System;
using System.Collections.Generic;
using System.Text;
namespace NTier.Entity
{
public class Cliente
Figura 9: Adicionando atributos na classe Cli-
{
ente (Add > Field). /// <summary>
/// Atributos
/// </summary>
#region Atributos
Crie mais esses atributos seguindo os
private int id;
passos acima: cpf, email, id, telefone. private string nome;
private string cpf;
private string email;
Vamos encapsular os atributos para private string telefone;
manter a segurança na persistência das
entidades do projeto. #endregion
/// <summary>
/// Propriedades
/// </summary>
#region Propriedades
public int Id
{
get { return id; }
set { id = value; }
}
}
}
Com a classe Cliente definida, temos nossa
camada de entidades concluída utilizando
apenas uma entidade nesse exemplo. Na se-
gunda parte desse artigo vamos criar a cama-
da de dados (Data) que ficará responsável
pelas transações SQL com o banco de dados.
Felipi Pocchini
Graduado em Ciência da Computação pela Universidade
José do Rosário Vellano (UNIFENAS), em Alfenas – MG,
trabalha com desenvolvimento de aplicações Web e Win-
dows Forms utilizando a tecnologia .Net. Moderador da
comunidade Desenvolvendo para Web, colaborador da
comunidade Codificando.Net e mantém o blog
www.felipepocchini.net.
Codificando.net e-magazine
O SQL Server 2005 introduziu o Service ções pode ser modificada e as requisições
Broker, um sistema de filas de mensa- já disparadas são perfeitamente gerencia-
gens para aplicações distribuídas garan- das pelo Service Broker, podendo ser reti-
tindo que todas as mensagens persistam radas e modificadas. Desta forma, mesmo
e são recebidas mesmo quando ocorrem em caso de falha no sistema, teremos todas
falhas no sistema possibilitando uma no- as transações preservadas pelo Service
va geração de aplicações altamente esca- Broker em uma tabela e elas serão aplica-
láveis. das tão logo quanto possível garantindo
que as mensagens envolvidas no processo
Os desenvolvedores de software criam a sejam corretamente formatadas, entendi-
maioria das aplicações usando processa- das e processadas pelas aplicações que as
mento seqüencial e síncrono. Neste mo- enviam e recebem. Com este trabalho, não
delo a transação é iniciada, o dado é blo- há um consumo de recursos geradores de
queado (para evitar o uso por outras esperas que impactem na performance da
transações), as alterações são efetuadas e aplicação e a segurança tem um nível de
o dado é desbloqueado. Isto funciona confiabilidade maior.
bem para certas aplicações, mas existem
aplicações as quais necessitam de consis- As partes envolvidas, ou seja, as que envi-
Codificando.net e-magazine
tência para operações que envolvem vá- am e recebem, são os endpoints. A imple-
rios bancos de dados, plataformas e até mentação física de um endpoint são os
mesmo outras empresas. Muitas vezes bancos de dados envolvidos. O Service
estas transações simplesmente enviam Broker é a ponte de envio e recepção de
alguma requisição de processamento e dados entre os endpoints. O endpoint que
não exigem um retorno imediato de res- envia é o initiator e o endpoint receptor é
posta, pois têm a garantia de suas requi- o target. O gerenciamento desta comunica-
sições serem processadas tão breve ção pelo Service Broker é chamado de con-
quanto possível. versation, a troca de dados entre os endpo-
ints, cujo tipo é um dialog, ou seja, a co-
Embora essas transações sejam assíncro- municação entre dois endpoints.
nas, não corremos o risco de quebra de
integridade dos dados, pois todas as re- Os objetos que compõem o Service Broker
quisições são colocadas em uma fila são:
transacional, ou seja, esta fila de requisi-
CRIANDO UM CONTRACT
Codificando.net e-magazine
Codificando.net e-magazine
Figura 12: Recebendo a mensagem: começo … Figura 15: Consultando as queues novamente.
Codificando.net e-magazine
MCPD, MCDBA, MCSD.NET, MCSD, MCAD, MCSA. Instrutor
oficial Microsoft e consultor especializado em tecnologia
Microsoft e em Gestão de Projeto, atuando a mais de 10
anos no mercado de tecnologia. Palestrante e professor de
pós-graduação em diversas universidades de São Paulo.
Mantém o site www.adrianoluciano.net
BAY2_N2RV_RPCAMTable tabe-
laSAP = new BAY2_N2RV_RPCAMTable
();
proxy.Bay2_N2rv_Rfc_Pxp_Camph(ref
tabelaSAP);
dt.Rows.Add(dr);
}
dataGridView1.DataSource =
dt;
Codificando.net e-magazine
}
catch (Exception ex)
{
MessageBox.Show
(ex.Message);
}
}
Listagem 1: Código em C# do método acessarSAP.
Figura 4: Referências do projeto, depois das
adições necessárias.
A execução da aplicação com este código,
Agora que as referências necessárias fo- dá um retorno muito próximo do que foi
ram inclusas no projeto, vamos adicio- apresentado no artigo de leitura do SAP
nar um dataGridView no formulário e utilizando o VS2003.
provar que a solução funciona. No mé-
todo LOAD do formulário, adicionamos Veja a Figura 5, como ficou o resultado da
uma chamada para o método acessar- aplicação construída com C# 2008 Express.
SAP() que carregar os dados na grid.
Diego Nogare
Graduado em Ciência da Computação, Pós-Graduado
em Engenharia de Computação com ênfase em Desen-
Figura 5: Aplicação desenhada com o Visual volvimento Web com .NET. Colaborador do Portal Linha
Studio 2008. de Código e da revista SQL Magazine, Líder do grupo de
usuários Codificando .NET, Líder dos Microsoft Student
Com a finalização deste artigo, fecha- Partners [MSP] de São Paulo e Microsoft Most Valuable
Professional [MVP] em SQL Server, possui
mos o ciclo de 3 artigos sobre o SAP
certificações MCP e MCTS em SQL Server 2005, é pales-
que havia prometido. Foram criados trante em eventos da Microsoft, Codificando .NET e
aplicações para exemplificar a Leitura e INETA BR, mantém o site: www.diegonogare.net.
Escrita do SAP utilizando o SAP .Net
Connector 2.0 no Visual Studio 2003, e
um workaround para se trabalhar com o
Visual Studio 2005 e 2008.
Codificando.net e-magazine
na figura 2.7:
Codificando.net e-magazine
Report itens dor de informações.
Textbox
Figura 2.9 – Table Properties
Codificando.net e-magazine
Codificando.net e-magazine
Os parâmetros aqui criados podem ser
♦ Zoom
utilizados para formatação condicional
ou em expressões. Ao contrário dos re-
O controle é capaz de processar e renderi-
latórios remote mode, esse modelo de re-
zar os relatórios independente do seu mo-
latórios não tem uma área para que o
delo, local ou remote. A figura abaixo exibe
usuário selecione ou digite o valor dos
o controle ReportViewer em ação renderi-
parâmetros, sendo responsabilidade do
zando um relatório.
cliente providenciar uma interface para
coleta dessas informações e gerar o con-
junto de dados devidamente filtrado e
carregá-lo no dataSet, os parâmetros
são pouco utilizados para seleção dos
registros, uma vez que é mais indicado
fazer essa restrição diretamente na pes-
quisa, ainda que tenhamos como apli-
car filtros (propriedade das tabelas, tab Figura 2.13 – reportviewer
Caio Azevedo
Graduado em Ciência da Computação, Engenharia Civil e
louco por ciências exatas em especial física e matemática.
Coordenador da Célula Microsoft da Magna Sistema e Arqui-
teto Microsoft, palestrante, tecno-colunista e instrutor da
treinando .net. MCP, MCAD, MCSD, MCTS e MCPD. E
fanático pela série star wars – “may the force be with you.”
http://caioazvdo.blogspot.com/
Codificando.net e-magazine
Open Source
Por: Alexandre Tarifa
www.codificando.net Abril
Out // Maio
Nov -2009
2009 | 36