Was ist mit diesem Code falsch? eine variable Löschen in verschiedenen Bereichen zu schaffen

StackOverflow https://stackoverflow.com/questions/1606457

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe vor kurzem einen Code ähnlich wie skizziert unten gesehen.

public void someMethod() {
  Lecture lect = createLecture();

  ...

  lect.getLectureSeries().delete();
}


public Lecture createLecture() {
  LectureSeries series = new Series();
  Lecture lect = new Lecture(series);

  ...

  return lect;
}

Der Punkt ist, dass ein Objekt (in diesem Fall ist die lecture), die am Ende des Anrufs zu somemethod gelöscht werden muss, () ist tatsächlich in dem Anruf zu einem anderen Verfahren hergestellt. Ich versuche zu erklären, warum es im gleichen Umfang erstellt werden soll, wird es schließlich gelöscht werden. dh

public void someMethod() {
  LectureSeries series = new Series();
  Lecture lect = createLecture(series);

  ...

  series.delete();
}


public Lecture createLecture(LectureSeries series) {
  Lecture lect = new Lecture(series);

  ...

  return lect;
}

Der ursprüngliche Code hat einige Komplikation aufräumt Dinge verursacht, wenn die Dinge nicht so hoffentlich werden die Vorteile offensichtlich, aber hat jemand irgendwelche Ideen, wie ich das allgemeinere Prinzip hinter diesem Refactoring erklären kann? oder jemand möchte mir erklären, warum ich falsch?

== == Bearbeiten

Der Fall in Frage wurde so ein Testverfahren etwas Reinigung, das während der Durchführung des Tests erstellt worden war, war wichtig. Ich denke aber, dass die unerwünschte Nebenwirkung eines lecture als Ergebnis des Aufrufs zu createLecture erstellt werden () etwas ist noch zu versuchen, und in den meisten Fällen vermieden werden.

War es hilfreich?

Lösung

Es ist nichts falsch mit dem Objekt in einem Verfahren zu schaffen, die über den Rahmen des Verfahrens lebt.

In Müll gesammelt Sprachen nimmt das Aufräumen von selbst.

In Sprachen, in denen der Programmierer die Bereinigung selbst verwalten müssen, muss der Programmierer den Besitz des Objekts verstehen, dass sie sich von dem Verfahren erhalten und ihre Pflichten in Bezug auf sie freigegeben wird.

Andere Tipps

Sie können das Argument von "Inversion of Control" verwenden. Das Lecture Objekt braucht ein lecture Objekt und es ist besser, diese Aufgabe hinein injiziert werden, anstatt es selbst zu schaffen.

Abhängigkeiten in Objekte Injizieren ist immer eine gute Praxis. Spezifisch für Ihren Fall können Sie auch sagen, dass die Erstellung und Löschen von Aussagen sollten so nah wie möglich sein. Dies erhöht sicherlich die Lesbarkeit. Im ersten Fall sehe ich ein Element gelöscht wird, aber ich sehe nicht, wo das Element erstellt wird. Ich muß erraten, dass das Element in der Erstellungsmethode erstellt wird, oder den gesamten Code suchen zu finden, wo dies geschieht. Fehler (falls die lecture Schöpfung versagt) Handhabung ist auch einfacher.

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