Frage

Ich bin ein großer Fan von Software-Design-Prinzipien wie SOLID und DRY . Welche anderen Prinzipien existieren für OO Software-Design?

Hinweis. Ich bin nicht auf der Suche nach Antworten wie „Kommentar Code“, sondern nach Grundsätzen OO-Design wie die erörtert wird von Uncle Bob .

War es hilfreich?

Lösung

Eine ziemlich umfassende Liste von Wikipedia:

http://en.wikipedia.org/wiki/List_of_software_development_philosophies

  • Agile Software-Entwicklung
  • Agile Unified Process (AUP)
  • Verhalten Driven Development (BDD)
  • Big Design-Up Front (BDUF)
  • Brooks Gesetz
  • Kathedrale und der Basar
  • -Code und beheben
  • Konstruktionistische Design-Methodik (CDM)
  • Cowboy Codierung
  • Crystal Clear
  • Designgetriebene Entwicklung (D3)
  • Sie wiederholen sich nicht (DRY) oder einmal und nur einmal (OAOO), Single Point of Truth (SPoT)
  • Dynamic Systems Development Verfahren (DSDM-)
  • Extreme Programming (XP)
  • Feature Driven Development
  • Hollywood-Prinzip
  • iterative und inkrementelle Entwicklung
  • Gemeinsames Anwendungsdesign, auch bekannt als JAD oder "Joint Application Development"
  • Kaizen
  • Kanban
  • KISS-Prinzip (Keep it simple, stupid)
  • Lean Software-Entwicklung
  • Microsoft Solutions Framework (MSF)
  • Modell Driven Architecture (MDA)
  • Open Source
  • Öffnen Unified Process
  • Schnell-and-dirty
  • Rational Unified Process (RUP)
  • Scrum
  • Smart (agile Entwicklung)
  • Die Trennung von Bedenken (SoC)
  • Service-orientierte Modellierung
  • Software Craftsmanship
  • Software Systemsicherheit
  • Spiral Modell
  • Testgetriebene Entwicklung (TDD)
  • Unified Process (UP)
  • V-Modell
  • Wasserfall-Modell
  • Rad und Spoke-Modell
  • Schlimmer ist besser (New Jersey-Art, wie mit dem MIT-Ansatz gegen)
  • Xtreme
  • Sie Is not Gonna Need It (YAGNI)
  • Zero One Unendlichkeit

Andere Tipps

High Cohesion - Wie konzentriert sind die Aufgaben der Module, die Sie entwerfen sind .

Low Kupplung -. Der Grad der verlassen Module auf anderen Modulen

Wählen Sie Komposition der Vererbung, ist eins.

Viele Menschen, vor allem diejenigen, die mit OO beginnen Klassen ausgebaut, als alles, was sie wirklich brauchen, ist Zusammensetzung zu verwenden. Wirklich, wenn Sie sich selbst stellen sollten, ist die neue Klasse B eine Klasse A? Wenn nicht, dann sollten Sie nicht verlängern.

Zum Beispiel, sagen wir, ich habe eine Person Klasse, eine Car Klasse, und ich möchte eine neue Klasse machen eine DrivenCar Klasse. Eine naive Implementierung wäre zu sagen, (lassen Sie uns so tun, als wir Mehrfachvererbung bekam)

class DrivenCar extends Person, Car  { ... }

Ist die DrivenCar eine Art von Person? Nein, so sollte es nicht erstreckt Person sein. Ist das DrivenCar ein Auto? ja so ist es sinnvoll zu verlängern

Zusammensetzung der implmentation Verwendung würde so aussehen

class DrivenCar extends Car {
    private Person driver;
}

Die Muster GRASP . Ja, sie scheinen ziemlich trivial. Ähnliche Destillation bis auf Kernqualitäten, die andere, mehr beteiligen Muster zeigen.

Schnittstelle. Die meisten Entwurfsmuster basiert auf Trennung von Schnittstelle und Implementierung.

Wenn Sie Ihre API erwartet statt Schnittstelle Abstrakte Klasse wachsen, zu verwenden. Hinzufügen eine neue Methode im Interface erfordert, die sie implementieren alle Klassen zu ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top