Download - Práticas de Programação em .NET
![Page 1: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/1.jpg)
Práticas de programação em .NETRicardo Alves
http://netponto.org15ª Reunião Presencial - 23/10/2010
![Page 2: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/2.jpg)
Ricardo AlvesLicenciado do Instituto Superior de Engenharia de Lisboa (ISEL)4 anos de experiência profissionalC#, WCF, ASP.NET, SQL, VS LightSwitch, Agile methodologies
![Page 3: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/3.jpg)
Agenda
• Naming Conventions
• Coding Practices
• Unit Tests Practices
![Page 4: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/4.jpg)
Também disponível em vídeo...
Assista!http://www.vimeo.com/16498136
![Page 5: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/5.jpg)
Naming Conventions
• Código tem de reflectir a sua intenção
• Código claro e objectivo
• Meio caminho andado para documentação
![Page 6: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/6.jpg)
Naming Conventions• Naming Conventions 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
![Page 7: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/7.jpg)
Naming Conventions• Naming Conventions 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 “Hungarian notation”
![Page 8: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/8.jpg)
Naming Conventions• Naming Conventions 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
![Page 9: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/9.jpg)
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.ControllersPeteBrown.DotNetTraining.InheritanceDemoPeteBrown.DotNetTraining.Xml
![Page 10: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/10.jpg)
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
WidgetInstanceManagerXmlDocumentMainFormDocumentFormHeaderControl
![Page 11: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/11.jpg)
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
IWidgetIComponent
![Page 12: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/12.jpg)
Demo #1: Validar Naming Conventions através do FxCop
demonstração
![Page 13: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/13.jpg)
Coding PracticesPrincípios S.O.L.I.D.
![Page 14: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/14.jpg)
Coding Practices
• SOLID–Single Responsibility Principle
–Open/Closed Principle
–Liskov Substitution Principle
–Interface Segregation Principle
–Dependency Inversion Principle
![Page 15: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/15.jpg)
Coding PracticesSingle Responsibility Principle
![Page 16: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/16.jpg)
Coding Practices
• Single Responsibility Principle– Uma classe não deve ter mais que uma razão para ser
alterada
![Page 17: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/17.jpg)
Demo #2: Single Responsability Principle
demonstração
![Page 18: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/18.jpg)
Coding PracticesOpen/Closed Principle
![Page 19: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/19.jpg)
Coding Practices
• Open/Closed Principle– Deve ser possível alterar o comportamento duma
classe sem a modificar
![Page 20: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/20.jpg)
Demo #3: Open/Closed Principle
demonstração
![Page 21: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/21.jpg)
Coding PracticesLiskov Substitution Principle
![Page 22: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/22.jpg)
Coding Practices
• Liskov Substitution Principle– Classes derivadas devem ser substituíveis pelas suas
classes base
![Page 23: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/23.jpg)
Demo #4: Liskov Substitution Principle
demonstração
![Page 24: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/24.jpg)
Coding PracticesInterface Segregation Principle
![Page 25: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/25.jpg)
Coding Practices
• Interface Segregation Principle– Classes não devem ser forçadas a implementar
interfaces que não usam
![Page 26: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/26.jpg)
Demo #5: Interface Segregation Principle
demonstração
![Page 27: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/27.jpg)
Coding PracticesDependency Inversion Principle
![Page 28: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/28.jpg)
Coding Practices
• Dependency Inversion Principle– 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
![Page 29: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/29.jpg)
Demo #6: Dependency Inversion Principle
demonstração
![Page 30: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/30.jpg)
Coding Practices
• YAGNI– You ain’t gonna need it
• DRY– Don’t repeat yourself
• KISS– Keep it simple, stupid!
![Page 31: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/31.jpg)
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
![Page 32: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/32.jpg)
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
![Page 33: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/33.jpg)
Demo #6: Unit Tests Practices
demonstração
![Page 34: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/34.jpg)
Dúvidas?
![Page 35: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/35.jpg)
ReferênciasThe Principles of OOD
– http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
Design Guidelines for Developing Class Libraries– http://msdn.microsoft.com/en-us/library/ms229042.aspx
Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries
– http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613
![Page 36: Práticas de Programação em .NET](https://reader035.vdocuments.com.br/reader035/viewer/2022062419/5573217cd8b42aae7b8b4d63/html5/thumbnails/36.jpg)
Patrocinadores desta reunião