manual do desenvolvedor .net

Upload: arnaldo-lechner

Post on 12-Jul-2015

354 views

Category:

Documents


0 download

TRANSCRIPT

Manual .NET do Desenvolvedor

Microsoft Consulting Services

371_Visual Basic1638549491428042889.doc Pgina 2 de 63

SumrioI. Desenvolvendo em N Camadas...........................................6a. Servios de Apresentao......................................................6 b. Servios de Negcio...............................................................6 c. Camada de Gerenciamento.....................................................7 d. Camada de Regras de Negcio...............................................7 Recomendaes .............................................................................8 Implementando Componentes de Negcio com .NET............................8 e. Camada de Dados................................................................11 Recomendaes para a criao das classes da camada de dados..........11 Ao implementar Componentes de Acesso a Dados .............................13 Exemplo de Componente para a Camada de Dados............................14 f. Servios de Dados................................................................14 g. Comunicao entre Camadas (entre Classes).......................15

II. Utilizando XML................................................................15 III. Web Forms e ASP.NET...................................................16a. Dicas ao Programar ASP.NET...............................................16 Dicas de Visual Basic 7 para programadores ASP (que utilizavam VBScript)......................................................................................17 b. Nomenclatura de Variveis..................................................19 c. Escopo de Variveis.............................................................20 d. Nome de Mtodos ...............................................................20 e. Comentrios em VB.............................................................21

IV. Win Forms - VB..............................................................22a. Recomendaes ao Projetar Windows User Interfaces ........22 b. Nomenclatura de Variveis e Mtodos.................................23 c. Escopo de Variveis.............................................................23 d. Constantes..........................................................................24 e. Indentao..........................................................................24 f. Componentes e Classes........................................................25

V. Dicas de Performance......................................................26a. Turbinando cdigo VB.NET...................................................26 Seguem algumas regras de otimizao para cdigo .NET...................26

VI. ADO.NET Acessando Dados..........................................31 VII. Web Services................................................................33371_Visual Basic1638549491428042889.doc Pgina 3 de 63

a. Procedimento......................................................................33 b. Exemplo..............................................................................34

VIII. .NET Remoting............................................................37 IX. Interagindo com componentes COM (Unmanaged Code)37a. Procedimento......................................................................38 b. Gerenciando as Transaes Automticas com COM+............39 c. Transaes Automticas em Classes .NET............................41 d. Implementando Workflows de Negcio usando BizTalk.......42

X. Gerenciamento de Excees (Erros) ...............................44 XI. Tarefas Mais Comuns .....................................................46a. Tratamento de Log e Auditoria.............................................46 Auditoria......................................................................................46 Auditoria na interface do usurio (UI)...............................................47 Auditoria na Camada de Negcio.....................................................47 Auditoria na Camada de Acesso a Dados...........................................47 b. Rotinas em lotes..................................................................47 c. Criao de arquivos seqenciais..........................................47 d. Sistemas sem fio.................................................................48 e. Aplicaes Assncronas (MSMQ)..........................................49 Vantagens do uso de comunicao baseada em mensagens:...............49 Desvantagens do uso de comunicao baseada em mensagens:..........49 Cenrios tpicos para Comunicao Assncrona..................................49 Exemplo C#..................................................................................50 Exemplo Visual Basic.....................................................................51 f. Dicas sobre o MS Message Queue.........................................51 Controle de Timeouts.....................................................................52

XII. Documentao de Projeto.............................................54 XIII. Recomendaes de Design..........................................55 XIV. Comunicao Segura entre Componentes....................56 XV. Migrando aplicaes para .NET......................................57 XVI. Escolha seu Objetivo....................................................58a. Escalabilidade......................................................................58 b. Disponibilidade ...................................................................58 c. Facilidade de Manuteno....................................................59 d. Segurana...........................................................................59 e. Facilidades de Gerenciamento Operacional..........................60

XVII. ndices........................................................................61 XVIII. Referncias...............................................................62371_Visual Basic1638549491428042889.doc Pgina 4 de 63

371_Visual Basic1638549491428042889.doc Pgina 5 de 63

I. Desenvolvendo em N CamadasO desenvolvimento em N Camadas continua sendo o cerne da arquitetura de aplicaes distribudas. Porm, agora com o advento dos Web Services o desenvolvimento em camadas rompe fronteiras ampliando as possibilidades de uso de componentes distribudos separados pela Internet. Note que nos referimos a N camadas e no simplesmente a trs camadas, pois seguindo-se a orientao de diversas boas prticas de programao, chega-se a uma estrutura de camadas ainda mais refinada. Diversas interpretaes podem dar espao quando falamos em camadas: podemos pensar em camadas fsicas definidas por mquinas, camadas definidas por aplicaes que conversam entre si, camadas funcionais, e assim por diante. Como forma de padronizar a abordagem e permitir um melhor entendimento dos aspectos comuns aos projetos e tirar o mximo proveito do desenvolvimento de software em componentes, partimos para uma abordagem conceitual e lgica que identifica e separa as funcionalidades do software em servios. Esses servios so, ento, classificados logicamente em trs categorias, a saber: Servios de Apresentao: incluem as interfaces grficas bem como a lgica de apresentao; Servios de Negcio: incluem todas as regras de negcio assim como a lgica necessria para a aplicao das mesmas; Servios de Dados: incluem os sistemas de bancos de dados bem como as interfaces utilizadas para acess-los.

a. Servios de ApresentaoWin Forms; Web Forms; Namespaces e Classes com funes de fazer a validao dos dados inseridos pelo usurio No mundo .Net, temos a misso de atingir qualquer tipo de cliente, seja ele um PC (Personal Computer), WebTV, telefone celular, PDA, tablet PC, etc... Neste contexto aparece um novo conceito: SMART CLIENT (cliente inteligente). Por definio, o cliente inteligente um dispositivo que tem poder de processamento. Logo, teremos clientes inteligentes com maior ou menor poder de processamento (o telefone celular tem baixo poder de processamento e o PC tem um enorme poder de processamento). A tecnologia .NET permite, atravs do uso de Win Forms ou atravs do Mobile Internet Toolkit, aproveitar as vantagens de um smart client.

b. Servios de NegcioAs classes dessas camadas podem agora ser implementadas atravs de trs tecnologias distintas: Classes organizadas em namespaces e compiladas como DLLs Web Services disponibilizados como arquivos .ASMX para acesso via WEB (http://soap) Classes implementadas em cdigo no-gerencivel (componentes COM) 371_Visual Basic1638549491428042889.doc Pgina 6 de 63

Esta ltima destina-se principalmente para implementaes que: Interagem com cdigo legado desenvolvido em verses anteriores do Visual Studio; Apiam-se em controle transacional COM+;

Interagem com Servios Microsoft programaticamente por meio de automations ou APIs (Ex: CDONTS no Exchange, DMO no SQL Server, BizTalk AIC, etc...) Independentemente da tecnologia escolhida, identificamos trs tipos de funcionalidades que, em geral, sero implementadas pelos servios de negcio. Podemos dividir esses trs tipos de funcionalidades em trs grandes camadas funcionais : Camada de Gerenciamento; Camada de Regras de Negcio; Camada de Acesso a Dados.

A identificao e classificao das funcionalidades em tais camadas fraciona o desenvolvimento de cdigo e permite o trabalho em equipe em grandes projetos.

c. Camada de GerenciamentoAs classes escritas na Camada de Gerenciamento esto diretamente relacionadas aos servios de usurio. Eles faro a devida interao com as classes de validao de entrada de dados pelo usurio e eventuais dependncias com regras de negcio, servios de log, servios de auditoria, controle transacional e outros. Na sua implementao, geralmente as classes gerentes delegam seus servios s classes de regras de negcio depois de j terem agregado seu trabalho.

d. Camada de Regras de NegcioEsta camada o ncleo dos servios de negcio e onde se encontra a maior probabilidade de reutilizao de objetos, devendo prever extenses de forma a aceitar novos requisitos e circunstncias do negcio. nesta camada, ainda, que identificamos fluxos de trabalho (Workflows) que determinam a dinmica de operao do negcio a ser automatizado e a criao dos principais componentes de cdigo. Ao implementar regras de negcio, sugerimos que voc verifique a natureza do negcio versus as necessidades e os desejos pretendidos para a automao do sistema em questo, e identifique o que ser preponderante: Orquestrao do processo de negcio (Workflow) ou 371_Visual Basic1638549491428042889.doc Pgina 7 de 63

Conjuntos modulares de lgicas independentes Para a primeira situao, utilize fluxos de trabalho de negcio implementados com orquestraes BizTalk para gerenciar um processo que envolva vrios passos (steps) e transaes muito demoradas (long running transactions). Integre o sistema com outros sistemas ou servios atravs de troca de mensagens. Construa servios que precisam ser expostos atravs de vrias tecnologias (COM, MSMQ, HTTP, SOAP, E-MAIL) e serem integrados junto a diversos sistemas. Aproveite os diversos adapters e conectores disponveis para o uso com BizTalk Server. Para a segunda situao voc dever implementar o negcio utilizando-se apenas de componentes quando: No tiver necessidade de utilizar-se de interfaces baseadas em mensagens ou negcios assncronos; Tiver necessidade de encapsular funcionalidades e lgicas que possam ser reutilizadas por vrios processos de negcio; A lgica a ser implementada exigir processamento intensivo ou fizer uso de muitas chamadas em APIs;

Recomendaes Use comunicao assncrona sempre que possvel. Quando usar mensagens, garanta estado nas interfaces que evitem que uma mesma mensagem recebida duas vezes seja tratada novamente. Defina com cuidado as fronteiras (incio e trmino) das transaes de forma a permitir recorrncia de tentativas e composies. Rode os componentes de regras de negcio sempre que possvel no contexto de um usurio de servio especfico. Escolha e mantenha um formato interno para estados consistentes. Defina por exemplo XML ou DataSet. Avalie cuidadosamente se voc precisa, ou no, utilizar-se de anlise e programao orientada a objetos. Em muitos casos, pode ser mais simples usar padres de representaes de dados prontos e consolidados, tais como DataSets, do que elaborar modelos de objetos proprietrios.

Implementando Componentes de Negcio com .NET

371_Visual Basic1638549491428042889.doc Pgina 8 de 63

Em .NET temos a criao de componentes a partir de classes. As classes em .NET que so declaradas como private no se tornam componentes. Voc pode criar componentes que encapsulam regras de negcio utilizando o framework .NET. Todo cdigo criado dentro do ambiente .NET chama de cdigo gerencivel ou popularmente managed code. Um managed code pode aproveitar das vantagens oferecidas pelo Enterprise Component Services (COM+) ao se implementarem transaes distribudas e outros servios comuns s aplicaes distribudas. essencial que, logo no incio do desenvolvimento dos componentes (classes pblicas), seja definido o uso, ou no, do Enterprise Component Services. Uma vez que seus componentes (classes) vo sendo codificados, fica cada vez mais difcil acrescentar ou retirar funcionalidades do Enterprise Services. As classes (components) da camada de negcio: So chamadas por classes na camada gerenciadora, por outras classes de outros processos da camada de negcio ou por outros servios existentes em aplicaes externas. Em geral, essas chamadas so feitas com a passagem de dados de negcio que devem ser trabalhados. Quando o conjunto de tais dados de negcio complexo, ns o chamamos de documento; So as razes (roots) das transaes que iniciaro ou devero votar quando participarem de outras transaes iniciadas por outras classes (components); Devem fazer toda a validao de entradas e sadas; Podem expor operaes de compensao para falhas ou problemas que podem acontecer ao processo; Chamam classes (components) de acesso a dados (camada de dados) para consultar dados como para atualiz-los; tanto

Podem chamar servios externos atravs de interfaces existentes chamando outros processos de negcio; Ao identificar que algo est inadequado, geram uma exceo (erro) de forma a garantir transaes atmicas.

Use funcionalidades do Enterprise Services tanto para iniciar como para votar (participar de forma ativa) em transaes heterogneas. Para fazer isso, necessrio herdar da classe ServicedComponent e utilizar o objeto ContextUtil.

371_Visual Basic1638549491428042889.doc Pgina 9 de 63

Figura 1 - Exemplo de cdigo utilizando Component Services

371_Visual Basic1638549491428042889.doc Pgina 10 de 63

e. Camada de DadosAs classes deste grupo isolam o resto da aplicao de tudo que esteja relacionado manipulao dos bancos de dados. Elas fornecem dados para as regras de negcio de forma mais simplificada e modificam o contedo do banco de dados sob a orientao dessas regras, isolando as funcionalidades e os detalhes da implementao fsica. Em .NET, temos muitas possibilidades de uso do ADO.NET; assim, importante identificar padres que resolvam os tipos de problemas mais comuns no dia a dia de forma a garantir produtividade e facilidade em futuras manutenes de cdigo. importante notar que o que sugerido como boa prtica em termos de arquitetura de aplicao .NET coloca a aplicao dividida em camadas funcionais. A utilizao de uma camada de dados entre a camada de regra de negcios encapsulando o ADO.NET garante a padronizao do mesmo para as funcionalidades mais comuns do dia a dia, promovendo facilidades de manuteno, extenso e produtividade.

Servios de Usurio Web Forms

Servios de NegcioClasses Gerenciamento

Servios de Dados SQL, Oracle, DB2

Win Forms

Classes Regras de Negcio

Classes (Validaes)

Classes Acesso a Dados

ADO.NET

Figura 2 - As diversas camadas funcionais no modelo de programao .NET

Recomendaes para a criao das classes da camada de dados Retorne apenas os dados de que voc realmente necessita; Use as Stored Procedures para abstrair o acesso aos dados (recomendvel); Balanceie a utilizao de Stored Procedures quanto a implementao de regras de negcio. Faa isso tendo em mente bom senso quanto ao real 371_Visual Basic1638549491428042889.doc Pgina 11 de 63

reaproveitamento de lgica e facilidade de manuteno. Muitas Stored Procedures podem ser afetadas, o que acabar resultando em dificuldades de manuteno; Evite a situao em que uma Stored Procedure chama outra Stored Procedure, e assim por diante. Isso um sintoma de excesso de Stored Procedures; Implemente um conjunto padro de Stored Procedures para aquelas tarefas mais comuns, tais como insert, delete, update, find, etc. Se possvel, use geradores de cdigo. Isso trar produtividade, consistncia e padro ao desenvolvimento; Quando houver funcionalidades que sejam utilizadas por vrios componentes, implemente-as em uma interface separada; Planeje e faa a interface de comunicao com a camada de negcios de forma consistente e compatvel, evitando sempre a necessidade de transformaes ou mappings; Utilize DataReaders sempre que houver operaes de leitura de dados (readonly, forward only) apenas. Nesse caso, faa a sua camada de dados retornar DataReaders objects; Quando h a necessidade de uso prolongado do objeto DataReader, aconselhase considerar a opo de se utilizar Datasets, que so sempre desconectados (isso aumenta a escalabilidade) Quando possvel, interessante que a camada de dados exponha metadados (informaes a respeito dos dados) tais como schema ou nomes de colunas: isso oferece maior flexibilidade para a camada de negcio. Os ganhos com flexibilidade tm um custo que pago com degradao de performance ou at mesmo escalabilidade. Evite a construo automtica de um componente de acesso a dados para cada tabela fsica. Considere a possibilidade de escrever seus componentes de acesso a dados num nvel de abstrao e de normalizao maior e mais prximo das necessidades imediatas da camada de negcio. muito comum a criao de uma classe representando uma tabela que faz relacionamento entre duas tabelas. Neste caso, d preferncia por implementar mtodos nas classes principais. Por exemplo, imagine que existem em sua base as seguintes entidades: Livros e Autores. Essas entidades contm um relacionamento do tipo vrios para vrios. Esse relacionamento implementado fisicamente na base de dados por uma tabela. Em vez de se criar uma classe responsvel por essa tabela, d preferncia por criar mtodos, nas camadas Autor e ou na classe Livro, que faam a incluso desse relacionamento (na classe Autor, crie o mtodo AcrescentarLivro e, na classe Livro, crie o mtodo AcrescentarAutor); Sempre que for necessrio guardar dados criptografados, ser esta camada que dever criptografar e descriptografar os dados; Quando as classes da camada de negcio usarem Enterprise Services (COM+), crie as classes de acesso a dados como sendo do tipo componentes de servios e faa seu deployment no Enterprise Service (COM+) como uma library Application;

371_Visual Basic1638549491428042889.doc Pgina 12 de 63

Habilite transaes apenas quando for realmente imprescindvel. Nunca marque todos os componentes de acesso a dados com Require Transactions. Marque tais componentes com Supports Transactions, adicionando o seguinte atributo:[Transaction (TransactionOption.Supported)]

Ao fazer uso de nveis alternativos ao default de isolation levels em queries, balanceie seu benefcio quanto a performance e conteno, confrontando os requisitos de vazo e acurcia dos dados. Em casos de alta vazo (throughput), a acurcia dos dados pode ser prejudicada se forem utilizados nveis de isolamento menos rgidos; Quando houver transaes heterogneas e a camada de dados tiver de participar, garanta que esta nunca seja o root da transao. mais apropriado que a camada de negcio ou a gerenciadora seja o root da transao; Quando a aplicao contiver mltiplos componentes de acesso a dados, recomenda-se usar a camada testada e de alta performance Data Access Application Block em suas aplicaes para gerenciar as conexes, executar comandos, fazer cache de parmetros, etc. (veja a figura).

Figura 3 - Esquema de construo de componentes de dados

Ao implementar Componentes de Acesso a Dados Faa simples transformaes e mapeamentos para entrada e sada de dados; Use um componente para interfacear os dados e um componente (apenas um) para conectar-se fonte dos dados; 371_Visual Basic1638549491428042889.doc Pgina 13 de 63

Componentes da camada de acesso a dados no necessariamente devem encapsular operaes em apenas uma tabela. Geralmente, eles atuam em uma tabela principal e operam algumas tarefas em outras tabelas relacionadas.

Exemplo de Componente para a Camada de DadosO cdigo em C# a seguir mostra um exemplo de um simples componente de acesso a dados. Este cdigo no tem a inteno de ser um modelo a ser copiado em seu cdigo. Sua funo apenas ilustrar o conceito envolvido nesta seo:

public class OrderData { private string conn_string; public OrderData() { // obtm a string de conexo em fonte segura e criptografada // atribui a string a conn_string } public DataSet RetrieveOrders() { // Cdigo que retorna um DataSet contendo Dados da tabela Orders } public OrderDataSet RetrieveOrder(Guid OrderId) { // Cdigo que retorna um tipo DataSet de nome OrderDataSet // que representa uma ordem especfica. // (OrderDataSet ter um schema que tenha sido definido no Visual Studio) } public void UpdateOrder(DataSet updatedOrder) { // cdigo que altera o Banco de dados baseado nas propriedades // da Order passada como parmetro do tipo Dataset } }

f. Servios de DadosCorrespondem ao software de armazenamento e gerenciamento dos dados assim como as classes que conhecem o repositrio de dados, a disposio lgica e

371_Visual Basic1638549491428042889.doc Pgina 14 de 63

fsica em que os dados esto armazenados, os protocolos de comunicao, a concorrncia no acesso e o uso dos dados, a segurana, a sincronia, etc. No Universo .NET, temos como principais representantes o namespace System.Data (ADO.NET) e o Sistema Gerenciador de Banco de Dados Relacional SQL Server. Stored Procedures implementadas em sua consideradas servios de dados do ponto de vista fsico. aplicao tambm sero

g. Comunicao entre Camadas (entre Classes)A comunicao entre camadas se faz sempre via criao de instncia da classe chamada pela classe chamadora, seguida de chamada de execuo de mtodo. Neste momento, os dados que devem ser transferidos da classe chamadora para a classe chamada devero ser passados como parmetros. Tais parmetros podero ser objetos ou referncias a objetos.

II. Utilizando XMLExtendable Markup Language um padro consolidado no mundo da tecnologia que destina-se a organizar e descrever informaes. Devido sua essncia autodescritiva (Dados + Metadados), o XML usado em todas as camadas lgicas e fsicas de uma aplicao como meio para a comunicao e a transferncia de dados. Em .NET, temos um Namespace especfico para a rpida manipulao e criao de informao no formato XML: System.Xml Este namespace oferece classes com mtodos que executam as principais tarefas relacionadas manipulao de dados em XML, tais como: 1. Carrega os dados XML (System.Xml.Serialize) Exemplo: numa estrutura hierrquica em memria

XmlDocument myDoc = new XmlDocument(); myDoc.Load ("c:\\samples\\arquivo.xml"); 2. Pesquisa, no documento, valores ou atributos de um determinado TAG ou caracterstica. Exemplo: XmlNodeList myList; myList = myDoc.SelectNodes ("Book[Author/@lastname='Smith']");

371_Visual Basic1638549491428042889.doc Pgina 15 de 63

3. Cria nodes XML e permite sua incluso em documentos de maior hierarquia Exemplo: XmlNode newNode = myDoc.CreateElement ("Book"); myDoc.DocumentElement.AppendChild (newNode); 4. Altera valores ou atributos Exemplo: // Incluindo um novo atributo XmlAttribute newAttr = myDoc.CreateAttribute ("Title"); newNode.Attributes.Append (newAttr) // Alterando o valor de um atributo newNode.Attributes["Title"].Value = "Visual Studio.Net"; 5. Etc.

III.Web Forms e ASP.NETa. Dicas ao Programar ASP.NET Verifique sempre se seu arquivo .aspx contm Language="XXXXXX" %> declarado uma nica vez o tag