Dienstag, 31. Mai 2016

IODA Architektur vs. prozeduraler Logik-Implementierung

Die IODA Architektur trennt strikt zwischen Operationen ( Implementierung von Logik ) und Integration ( Komposition von Operationen ).

Ein schönes Beispiel ist die Gegenüberstellung der BowlingGame-Kata von Uncle Bob und den Überlegungen dazu von Ralf Westphal


Hier erkennt man in der Gegenüberstellung der beiden zentralen Implementierungen der Responsibility, den Score zu ermitteln, die strukturellen Unterschiede ( Java vs. C# mal beiseite geschoben )

Uncle Bob

public int score() {
 int score = 0;
 int frameIndex = 0;
 for (int frame = 0; frame < 10; frame++) {
  if (isStrike(frameIndex)) {
   score += 10 + strikeBonus(frameIndex);
   frameIndex++;
  } else if (isSpare(frameIndex)) {
   score += 10 + spareBonus(frameIndex);
   frameIndex += 2;
  } else {
   score += sumOfBallsInFrame(frameIndex);
   frameIndex += 2;
  }
 }
 return score;
}

Ralf Westphal

int Score_frame(Frame frame, int[] rolls) {
 switch ((Frame.KindsOfFrame)frame.Kind) {
 case Frame.KindsOfFrame.Strike:
 case Frame.KindsOfFrame.Spare:
  return rolls [frame.RollIndex] + rolls [frame.RollIndex + 1] + rolls [frame.RollIndex + 2];
 default:
  return rolls [frame.RollIndex] + rolls [frame.RollIndex + 1];
 }
}