2010-12-20 11 views
4

In einer Bibliothek, die ich schreibe, habe ich einige Methoden, die nur sehr selten und im laufenden Betrieb ausgeführt werden. Da ich ein Fahrzeug modelliere, ist eine der (außergewöhnlichen) Methoden ein gerissener Motor, was sehr selten wäre. Soll ich bei dieser Methode eine Ausnahme auslösen? Dies wird verhindern, dass ein Fahrzeug verwendbar ist.Wo in diesem Beispiel am besten die Ausnahme zu werfen?

Ich lese das .NET Design Framework Richtlinien Buch und es besagt, dass eine Ausnahme sollte nur auftreten, wenn eine Methode die Ausführung nicht abgeschlossen werden kann. Die eigentliche Engine Cracked-Methode wird immer abgeschlossen, aber wenn eine meiner Methoden, wie Start-Engine (diese Methode speichert die Menge der Motor startet als Mittel zur Anspannung der Maschine), wird aufgerufen und führt zu einem Aufruf zu geknackt Motor, wo (wenn irgendwo) sollte ich eine Ausnahme werfen?

Antwort

4

Denken Sie, dass eine Ausnahme ausgelöst werden sollte, um Code- oder Laufzeitprobleme hervorzuheben. Dies ist eigentlich normale Systemlogik (in diesem Sinne, dass eine geknackte Maschine ein Modellzustand ist, kein Code-Problem), also sollte nicht geworfen werden.

Stattdessen sollte es einen Feedback-Mechanismus geben, der im Zusammenhang mit dem System, das Sie modellieren, sinnvoll ist.

+0

Könnten Sie bitte das Feedback-Mechanismus-Bit erklären (Was ist es)? – dotnetdev

+0

Es hängt wirklich vom Rest deines Codes ab, also wäre es schwer zu sagen - aber ich denke, dein System hat bereits ein Gefühl für den Zustand, mit bedingter Logik verbunden? EngineState.Cracked könnte dort passen, und Sie könnten Engine.Start wenn! Engine.Cracked (offensichtlich Pseudocode dort). –

+0

Ich sehe was du meinst. Ich kann diesem Ansatz folgen, aber eine gebrochene Ausnahme kann immer noch passieren, wenn das Auto in Bewegung ist, an welcher Stelle ich die Ausnahme werfen sollte (weil es das System am Funktionieren hindert). – dotnetdev

0

Ich glaube, Ihr Car Modell eine Variable wie so erklärt haben muss:

bool isEngineCracked; 

Dann, wenn Sie ein Aufruf an die crackedEngine(Car car) Verfahren machen es ein bool

Dies wiederum Sie können zurückkehren Zustandsüberprüfung des Motors, um zu sehen, ob der Motor funktioniert oder nicht.

1

Wenn Sie System (oder Subsystem) zu Test Motoren ausgelegt ist, und der Zustand eines Motors geknackt wird, ist ein normaler Zustand innerhalb des Systems als Folge der normalen Systemverarbeitung zu erwarten, dann ist es nicht eine Ausnahme. wenn das System für den Einsatz in einem Serienmotor geeignet ist, wo das Gesamtsystem, wenn der Motor gesprungen ist, die Konstruktionsfunktion nicht mehr ausüben kann (Hubkisten, Fahrzeug vorwärts bewegen, was auch immer), dann ist ein gerissener Motor eine Ausnahme .

Wenn das Gesamtsystem eine Kombination aus beidem ist, dann innerhalb des Subsystems, das als Motortester fungiert (wo ein gerissener Motor einer der Zustände ist, in denen das System verwaltet, überwacht, berichtet und diagnostiziert usw.)), sollte es ein definierter Zustand sein, keine Ausnahme, und im Rest des Systems sollte es eine Ausnahme sein ... Dann ist es in der Schnittstelle zwischen diesen beiden Subsystemen, dass Sie den gebrochenen Motorzustand erkennen müssen, und transformiere es in eine Ausnahme (und/oder umgekehrt)

Verwandte Themen