Este documento resume uma apresentação sobre práticas de programação em .NET. A apresentação discute convenções de nomenclatura, princípios de design como SOLID e práticas de testes unitários. Exemplos de código demonstram cada tópico.
2. Ricardo Alves Licenciado do Instituto Superior de Engenharia de Lisboa (ISEL) 4 anos de experiência profissional C#, WCF, ASP.NET, SQL, VS LightSwitch, Agilemethodologies
5. NamingConventions Código tem de reflectir a sua intenção Código claro e objectivo Meio caminho andado para documentação
6. Naming Conventions NamingConventions da .Net Framework http://msdn.microsoft.com/en-us/library/ms229045.aspx Escolher nomes facilmente legíveis e claros Dar preferência a legibilidade sobre brevidade Não usar underscore, hífenes, ou qualquer caracter não alfanumérico Não usar abreviações como identificadores
7. Naming Conventions NamingConventions da .Net Framework http://msdn.microsoft.com/en-us/library/ms229045.aspx Só usar acrónimos que sejam bem conhecidos Regra do Bing Fazer uma pesquisa no Bing pelo acrónimo, se o acrónimo aparecer nos primeiros resultados então podemos usar Regra não se aplica a acrónimos do negócio Usar nomes comuns, como value ou item, em casos onde o identificador e o seu tipo não têm qualquer valor semântico Usado em parâmetros ou variáveis de iteração Não usar “Hungariannotation”
8. Naming Conventions NamingConventions da .Net Framework http://msdn.microsoft.com/en-us/library/ms229045.aspx Pascal Case A primeira letra é maiúscula e as restantes primeiras letras de cada palavra são maiúsculas ObjectContext, BackColor Camel Case A primeira letra é minúscula e as restantes primeiras letras de cada palavra são maiúsculas numberOfDays, isValid Uppercase Todas as letras são maiúsculas PI, ID
9. Naming Conventions Namespaces Pascal Case, não usar underscores Acrónimos de 3 ou mais letras devem usar Pascal Case Seguir padrão: <Nome da Empresa/Developer>.<Tecnologia> AppliedIS.TimeCard.BusinessRules IrritatedVowel.Controllers PeteBrown.DotNetTraining.InheritanceDemo PeteBrown.DotNetTraining.Xml
10. Naming Conventions Classes e estruturas Pascal Case, não usar underscores Não usar nomes começados por “I” a não ser que a próxima letra seja minúscula, para não confundir com interfaces Acrónimos de 3 ou mais letras devem usar Pascal Case Não devem usar o mesmo nome que o Namespace a que pertencem Widget InstanceManager XmlDocument MainForm DocumentForm HeaderControl
11. Naming Conventions Interfaces Usar as mesmas convenções que para as classes, mas o nome deve começar com um “I” e a próxima letra deve ser maiúscula IWidget IComponent
12. Demo #1: Validar NamingConventions através do FxCop demonstração
28. CodingPractices DependencyInversionPrinciple Módulos não devem depender de outros Módulos, devem depender de abstracções Abstracções não devem depender dos detalhes, os detalhes é que devem depender das abstracções
31. Unit Tests Practices Ser o mais simples possível Ser independentes entre si Devem testar uma unidade de código de cada vez Usar Mocks para simular componentes externos Não testar configurações Não devem fazer asserções desnecessárias
32. Unit Tests Practices Devem ter nomes claros e concisos Testar comportamentos e não métodos Testar apenas classes e métodos com visibilidade publica Criar testes para reproduzir bugs encontrados Assegurar que as excepções que são lançadas têm testes associados
Namingconventions é um dos elementos mais importantes de previsibilidade e de descoberta em uma aplicaçãoO uso difundido e a compreensão destas convenções deve eliminar muitas das perguntas mais básicas e comuns dos utilizadores
HorizontalAlignment tem umalegibilidade superior a AlignmentHorizontalCanScrollHorizontally é muitomaislegivel e claroqueScrollableX (referencia “obscura” aoeixo X)
UsarOnButtonClick em vez de OnBtnClickGetLength é melhorqueGetInt
Validar as convençõesusadasporomissão no stylecop, ver se nãobatem com os slidesanterioresVer se ainda se consegueconfigurar novas regras de validação no StyleCop
Five valuation principles of object-oriented developmentManage dependencies between classes and reduce unnecessary complexityFacilitates testingPrinciples, not lawsRequire students
Umaclassedevefazerapenasumacoisa, e deve faze-la bem
É aplicavel a pacotes, assemblies, etcÉ a base paratodososoutrosprincipios
Devemosusarpolimorfismo e herançaparapoder extender a classe e modificar o comportamentonaderivada, nuncaalterando o codigoda original
O principio maisimportante de todosOs requisitosestãosempreemconstantemudança, masprecisamos de desenvolvercodigoestavel a mesmaCom OO,conseguimoscriarabstrações com desenhosolido, mascomportamentoflexivelA grandequestão e quandodevemosaplicareste principio
Nãodevehaverpreocupação entre usar a classe base ou a derivada
Violaçãodeste principio indicaquedevemosprecisar de fazeralgumrefactornanossahierarquia de classesIsto é um principio, nãouma lei
Criar interfaces pequenas e consistentesSe temosumaclasseabstractaou interface,entãoosimplementadoresnãodevem ser forçados a implementarpartesquenãolhesinteressam
Classes nãodevemdevpender de outras classes, elesdevemdepender de abstrações (interfaces)Prevent: Rigid (change affects too many parts of the system) Fragile (every change breaks something unexpected) Immobile (impossible to reuse)
Validar as convençõesusadasporomissão no stylecop, ver se nãobatem com os slidesanterioresVer se ainda se consegueconfigurar novas regras de validação no StyleCop