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.
Ricardo AlvesLicenciado doInstituto Superior de Engenharia de Lisboa (ISEL)4 anos de experiência profissionalC#, WCF, ASP.NET, SQL, VS LightSwitch, Agilemethodologies
Naming ConventionsNamingConventions da.Net Frameworkhttp://msdn.microsoft.com/en-us/library/ms229045.aspxEscolher nomes facilmente legíveis e clarosDar preferência a legibilidade sobre brevidadeNão usar underscore, hífenes, ou qualquer caracter não alfanuméricoNão usar abreviações como identificadores
7.
Naming ConventionsNamingConventions da.Net Frameworkhttp://msdn.microsoft.com/en-us/library/ms229045.aspxSó usar acrónimos que sejam bem conhecidosRegra do BingFazer uma pesquisa no Bing pelo acrónimo, se o acrónimo aparecer nos primeiros resultados então podemos usarRegra não se aplica a acrónimos do negócioUsar nomes comuns, como value ou item, em casos onde o identificador e o seu tipo não têm qualquer valor semânticoUsado em parâmetros ou variáveis de iteraçãoNão usar “Hungariannotation”
8.
Naming ConventionsNamingConventions da.Net Frameworkhttp://msdn.microsoft.com/en-us/library/ms229045.aspxPascal CaseA primeira letra é maiúscula e as restantes primeiras letras de cada palavra são maiúsculasObjectContext, BackColorCamel CaseA primeira letra é minúscula e as restantes primeiras letras de cada palavra são maiúsculasnumberOfDays, isValidUppercaseTodas as letras são maiúsculasPI, ID
9.
Naming ConventionsNamespacesPascal Case,não usar underscoresAcrónimos de 3 ou mais letras devem usar Pascal CaseSeguir padrão:<Nome da Empresa/Developer>.<Tecnologia>AppliedIS.TimeCard.BusinessRulesIrritatedVowel.ControllersPeteBrown.DotNetTraining.InheritanceDemoPeteBrown.DotNetTraining.Xml
10.
Naming ConventionsClasses eestruturasPascal Case, não usar underscoresNão usar nomes começados por “I” a não ser que a próxima letra seja minúscula, para não confundir com interfacesAcrónimos de 3 ou mais letras devem usar Pascal CaseNão devem usar o mesmo nome que o Namespace a que pertencemWidgetInstanceManagerXmlDocumentMainFormDocumentFormHeaderControl
11.
Naming ConventionsInterfacesUsar asmesmas convenções que para as classes, mas o nome deve começar com um “I” e a próxima letra deve ser maiúsculaIWidgetIComponent
Unit Tests PracticesSero mais simples possívelSer independentes entre siDevem testar uma unidade de código de cada vezUsar Mocks para simular componentes externosNão testar configuraçõesNão devem fazer asserções desnecessárias
32.
Unit Tests PracticesDevemter nomes claros e concisosTestar comportamentos e não métodosTestar apenas classes e métodos com visibilidade publicaCriar testes para reproduzir bugs encontradosAssegurar que as excepções que são lançadas têm testes associados
#5 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
#6 HorizontalAlignment tem umalegibilidade superior a AlignmentHorizontalCanScrollHorizontally é muitomaislegivel e claroqueScrollableX (referencia “obscura” aoeixo X)
#7 UsarOnButtonClick em vez de OnBtnClickGetLength é melhorqueGetInt
#8 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
#13 Five valuation principles of object-oriented developmentManage dependencies between classes and reduce unnecessary complexityFacilitates testingPrinciples, not lawsRequire students
#16 Umaclassedevefazerapenasumacoisa, e deve faze-la bem
#17 É aplicavel a pacotes, assemblies, etcÉ a base paratodososoutrosprincipios
#19 Devemosusarpolimorfismo e herançaparapoder extender a classe e modificar o comportamentonaderivada, nuncaalterando o codigoda original
#20 O principio maisimportante de todosOs requisitosestãosempreemconstantemudança, masprecisamos de desenvolvercodigoestavel a mesmaCom OO,conseguimoscriarabstrações com desenhosolido, mascomportamentoflexivelA grandequestão e quandodevemosaplicareste principio
#22 Nãodevehaverpreocupação entre usar a classe base ou a derivada
#23 Violaçãodeste principio indicaquedevemosprecisar de fazeralgumrefactornanossahierarquia de classesIsto é um principio, nãouma lei
#25 Criar interfaces pequenas e consistentesSe temosumaclasseabstractaou interface,entãoosimplementadoresnãodevem ser forçados a implementarpartesquenãolhesinteressam
#28 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)
#31 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