OO software Princípios de Design
-
10-09-2019 - |
Pergunta
Eu sou um grande fã de princípios de design de software, tais como SOLID e DRY . existem Que outros princípios para o projeto de software OO?
Nota. Eu não estou procurando por respostas como "comentar o seu código", mas ao invés de procurar princípios de design OO como os discutidos por Uncle Bob .
Solução
Uma lista bastante abrangente da Wikipedia:
http://en.wikipedia.org/wiki/List_of_software_development_philosophies
- desenvolvimento de software Agile
- Agile Unified Process (AUP)
- Behavior Driven Development (BDD)
- Big Projeto dianteiro Up (BDUF)
- A lei de Brooks
- Catedral eo Bazar
- Código e correção
- Construcionista metodologia de projeto (CDM)
- Cowboy codificação
- Crystal Clear desenvolvimento
- Design-impulsionado (D3)
- Não se repita (DRY) ou apenas uma única vez (OAOO), único ponto de Verdade (spot)
- metodologia de desenvolvimento de sistemas dinâmicos (DSDM)
- Extreme Programming (XP)
- Característica Driven Development
- Princípio Hollywood
- iterativo e desenvolvimento incremental
- Joint Application Development, aka JAD "Desenvolvimento Conjunto aplicação"
- Kaizen
- Kanban
- princípio KISS (Keep It Simple, Stupid)
- desenvolvimento de software magra
- Microsoft Solutions Framework (MSF) arquitetura
- Model-Driven (MDA)
- Open source
- Open Unified Process
- rápida e suja
- Rational Unified Process (RUP)
- Scrum
- Smart (desenvolvimento ágil)
- A separação de interesses (SoC) modelagem orientada a serviços
- Artesanato de software
- Software de Segurança do Sistema
- Modelo espiral desenvolvimento
- Test-Driven Development (TDD)
- Unified Process (UP)
- V-Model
- modelo Cachoeira
- modelo de roda e spoke
- Pior é melhor (estilo de Nova Jersey, em contraste com a abordagem MIT)
- Xtreme
- yagni (YAGNI)
- Zero One Infinito
Outras dicas
alta Coesão - Como focados são as responsabilidades dos módulos que você está projetando .
Acoplamento Baixo - O grau em que os módulos dependem de outros módulos <. / p>
Escolha composição sobre herança, é um deles.
Muitas pessoas, especialmente aqueles novo para OO começará estender classes quando tudo o que realmente precisa é usar composição. Realmente se você deve perguntar a si próprio, é a nova classe B Classe A? Se não, então você não deve se estender.
Por exemplo, digamos que eu tenho um Person
Class, um Car
Class, e eu gostaria de fazer uma nova classe chamada uma classe DrivenCar
. A implementação ingênua seria dizer (Vamos fingir que tem herança múltipla)
class DrivenCar extends Person, Car { ... }
É o DrivenCar um tipo de pessoa? Não por isso não deve ser estendendo Pessoa. o DrivenCar é um carro? sim por isso faz sentido para estender
Usando a composição implmentation seria parecido
class DrivenCar extends Car {
private Person driver;
}
GRASP . Sim, eles parecem bastante trivial. Mais como destilação até qualidades essenciais que outros padrões, mais envolvidos demonstram.
Interface. A maioria dos padrões de design são baseados na separação de interface e implementação.
Quando sua API devem crescer, use classe Abstract vez de Interface. Adicionando um novo método na interface exige que mudar todas as classes que implementá-lo.