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 .

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top