37
Práticas de programação em .NET Ricardo Alves http://netpont o.org 15ª Reunião Presencial - 23/10/2010

Práticas de Programação em .NET

Embed Size (px)

DESCRIPTION

Nesta sessão o Ricardo vai nos mostrar algumas das principais práticas utilizadas no desenvolvimento profissional de software na plataforma Microsoft .NET. Serão abordados temas como convenções e padrões de codificação em equipa e validação do código, diferentes formas estruturar uma solução, uma solução vs múltiplas soluções e quando faz sentido, princípios diversos como DRY, SOLID, KISS, YAGNI com demonstrações práticas, testes unitários, e mais...

Citation preview

Page 1: Práticas de Programação em .NET

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

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

Agenda

• Naming Conventions

• Coding Practices

• Unit Tests Practices

Page 4: Práticas de Programação em .NET

Também disponível em vídeo...

Assista!http://www.vimeo.com/16498136

Page 5: Práticas de Programação em .NET

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

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

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

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

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

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

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

Demo #1: Validar Naming Conventions através do FxCop

demonstração

Page 13: Práticas de Programação em .NET

Coding PracticesPrincípios S.O.L.I.D.

Page 14: Práticas de Programação em .NET

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

Coding PracticesSingle Responsibility Principle

Page 16: Práticas de Programação em .NET

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

Demo #2: Single Responsability Principle

demonstração

Page 18: Práticas de Programação em .NET

Coding PracticesOpen/Closed Principle

Page 19: Práticas de Programação em .NET

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

Demo #3: Open/Closed Principle

demonstração

Page 21: Práticas de Programação em .NET

Coding PracticesLiskov Substitution Principle

Page 22: Práticas de Programação em .NET

Coding Practices

• Liskov Substitution Principle– Classes derivadas devem ser substituíveis pelas suas

classes base

Page 23: Práticas de Programação em .NET

Demo #4: Liskov Substitution Principle

demonstração

Page 24: Práticas de Programação em .NET

Coding PracticesInterface Segregation Principle

Page 25: Práticas de Programação em .NET

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

Demo #5: Interface Segregation Principle

demonstração

Page 27: Práticas de Programação em .NET

Coding PracticesDependency Inversion Principle

Page 28: Práticas de Programação em .NET

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

Demo #6: Dependency Inversion Principle

demonstração

Page 30: Práticas de Programação em .NET

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

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

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

Demo #6: Unit Tests Practices

demonstração

Page 34: Práticas de Programação em .NET

Dúvidas?

Page 35: Práticas de Programação em .NET

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 37: Práticas de Programação em .NET

Obrigado!

Ricardo [email protected] http://pt.linkedin.com/in/rmalves/ http://twitter.com/rmalves