Refactoring älteren C-Code in MVC Design

8

Ich arbeite an etwas altem (wie älter als ich) C-Code, der aufgeräumt und auf den neuesten Stand gebracht werden muss, so dass er (unter anderem) leichter zu pflegen und sauberer mit dem aktuellen Code zu integrieren ist.

Der vorhandene Code ist ziemlich chaotisch und durchsetzt die GUI-Logik frei mit Geschäftslogik und Datenzugriffslogik. Die einzige Rettung ist, dass es kein Spaghetti-Code ist, und dass es modular ist (wie der meiste Code aus den Siebzigern ist).

Meine Frage ist: Kann mir jemand eine Anleitung geben, wie man den Code in MVC umformatieren kann? (Übrigens verschiebe ich auch den Code von C nach C ++, während ich diese Aufgabe erledige - aber das ist meine geringste Sorge , da ich mit beiden Sprachen ziemlich fertig bin).

Übrigens, mir ist vollkommen klar, dass dies keine triviale Aufgabe ist. Ich möchte nur wissen, was die Schritte sind von modularen Code, der DBAL / BL / GUI zu einer saubereren MVC-Implementierung mischt.

    
oompahloompah 28.07.2011, 06:14
quelle

2 Antworten

4

Ich bin nicht davon überzeugt, dass es eine definitive Reihe von Schritten geben kann. Was wir tun, wird mit der Struktur des bestehenden Codes variieren.

Ich stimme mit @Jesus Ramos überein, dass der Schlüssel zu einer Teststrategie ist. Das Problem für Sie ist wahrscheinlich, dass der Code derzeit nicht testbar ist, weil es keine "Einheiten" gibt. Wir können die Geschäftslogik nicht testen, ohne die Benutzeroberfläche zu testen.

Ich würde sehr ernsthaft darüber nachdenken, das Ding neu zu schreiben, anstatt es neu zu gestalten.

Wenn Sie umgestalten wollen, dann nehme ich an, dass Sie eine Art "Schweizer Käse" -Ansatz nehmen werden. Drill out Stücke, so dass eine zentrale Masse mit vielen Löchern. Ziehen Sie also den Datenbankzugriffscode heraus und konzentrieren Sie sich auf die Bereitstellung einer klaren API und eines Satzes von Datenobjekten - diese werden die Grundlage Ihres Modells. Ziehen Sie den GUI-Code in eine Ansichtsebene. Was übrig bleibt, ist die Controller-Logik, die Sie dann umgestalten können.

    
djna 28.07.2011, 06:30
quelle
2

Ich würde zuerst die Business-Logik-Ebene erstellen (zusammen mit einigen Komponententests, um sicherzustellen, dass es wie das Original läuft), würde ich dann in der Datenschicht arbeiten (wieder zusammen mit Komponententests). Sobald Sie diese beiden haben, ist es wahrscheinlich am besten, eine Schnittstelle zu erstellen, um den GUI-Code robust zu machen, ohne so gekoppelt zu sein und die erforderliche Funktionalität von Geschäftslogik und Daten der GUI zur Verfügung zu stellen, obwohl die GUI nur die Daten, die sie hat, an die Business-Logik-Schicht und dann das unterwirft sich der Datenschicht. Der Schlüssel hier ist Unit-Tests (wenn möglich), da dies Ihr Leben leichter macht, um sicherzustellen, dass Ihr Code und das Original beide funktional identisch sind.

Auch hier müssen Sie nicht Schritt für Schritt vorgehen. Es ist einfach die GUI bis zum Ende zu belassen, da dies (meistens) weniger kompliziert ist als die Business-Logik-Ebene.

Die schwierigste Aufgabe besteht darin, die Entkopplung selbst herauszufinden, da einige Leute dies schwierig machen und alle drei Schichten in einer einzigen Funktion haben und das auseinander reißen kann ein Ärger sein.

    
Jesus Ramos 28.07.2011 06:21
quelle

Tags und Links