Mit VCL für das Web (intraweb) als Trick für das Hinzufügen von Web-Interface zu einem Legacy-nicht-abgestuftes (2 Ebenen) Delphi Win32-Anwendung keinen Sinn macht?

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

Frage

Mein Team ist eine große Client Server win32 Delphi Anwendung erhalten. Es ist ein Client / Server-Anwendung (Thick-Client), die DevArt (SDAC) Komponenten verwendet, um SQL Server zu verbinden.

Die Geschäftslogik wird oft „gefangen“ in der Komponente der Event-Handler, ohnehin mit einer gewissen Refactoring es machbar ist, um die Geschäftslogik in gemeinsamen Einheiten (ein großer Teil dieser Arbeit zu bewegen, hat sich bereits während Refactoring ... Maintaing geschehen Legacy-Anwendungen jemand anderes geschrieben hat, sind sehr frustrierend, aber das ist ein sehr häufiger Job).

Jetzt gibt es die Anforderung einer Web-Schnittstelle, habe ich mehrere Optionen natürlich in dieser Frage, die ich auf der VCL konzentrieren will für die Web (intraweb) Option.

Die Idee ist sowohl die Verwendung für den gemeinsamen Code (die gleichen pas-Dateien) die Client / Server-Anwendung und die Web-Anwendung. Ich höre von vielen Menschen, dass verschobene Legacy-Anwendungen von delphi zu intraweb, aber hier ist ich versucht, zu dem Thick-Client zu halten.

Die Idee ist, gemeinsamen Code zu verwenden, wobei einige Compiler-Direktiven sein können spezifische Code zu schreiben:

{$IFDEF CLIENTSERVER}
  {here goes the thick client specific code}
{$ELSE}
  {here goes the Intraweb specific code}
{$ENDIF}

Dann ist ein weiteres Problem, das „Migrationsplan“, lassen Sie sich sagen, ich habe 300 Funktionen und auf dem ersten Release werde ich nur 50 von ihnen in der Web-Anwendung zur Verfügung. Wie Spur davon zu halten? Ich dachte an (ab) mit Delphi-Schnittstellen zu handhaben. Zum Beispiel für die Benutzerauthentifizierung ich alle zugehörigen Code in einer Prozedur bewegen konnte und erklären, eine Schnittstelle wie:

type
  IUserAuthentication= interface['{0D57624C-CDDE-458B-A36C-436AE465B477}']
    procedure UserAuthentication;
  end;

Auf diese Weise, wie ich die IUserAuthentication Schnittstelle implementieren beide in den Anwendungen (Thick-Client und Intraweb) Ich weiß, dass diese Funktion wurde „portiert“ auf die Bahn. Auf jeden Fall weiß ich nicht, ob dieser Ansatz sinnvoll ist. Ich habe einen Prototyp, den gesamten Prozess zu simulieren. Es funktioniert für eine „Hallo Welt“ -Anwendung, aber ich frage mich, ob es sinnvoll, auf einer großen Anwendung macht oder diese Schnittstelle Idee ist nur kontraproduktiv und kann nach hinten losgehen.

Meine Frage ist: ist dieser Ansatz sinnvoll? (Die Idee Interface ist nur eine zusätzliche Idee, es nicht so wichtig ist wie der gemeinsame Codeteil oben beschrieben) Ist es ein gangbarer Weg?

Ich verstehe es hängt viel von der Art der Anwendung, ohnehin generisch sein mein ein im CRM / Buchhaltung Domäne ist, und die Anzahl der gleichzeitigen Benutzer auf einer einzigen Installation ist in der Regel weniger als 20 mit Spitzenwerten von 50

EXTRA KOMMENTAR (UPDATE): Ich diese Frage stellen, denn da ich mich als einzigartige Option sehe Intraweb keine n-Tier-Anwendung habe eine Web-Anwendung für den mit gemeinsamem Code mit dem dicken Client hat. Die Entwicklung eines Web Service aus dem Delphi-Code macht keinen Sinn in meinem speziellen Fall, so dass die Alternative, die ich habe, ist das Web-Interface mit ASP.NET (Duplizieren der Business-Logik), aber in diesem Fall schreiben kann ich nicht die Vorteile des gemeinsamen Code in einem nehmen einfache Art und Weise. Ja könnte ich DLLs aufrufen, vielleicht, aber mein Code ist dafür nicht geeignet.

War es hilfreich?

Lösung

Das Wichtigste ist, dass Sie sich merken müssen, ist dies:

  • Ihr Thick-Client-.EXE-Prozess von einer Person zu einer Zeit verwendet wird (mehrere Personen werden mehrere Instanzen dass .EXE haben).
  • Ihr intraweb .EXE-Prozess wird von vielen Personen gleichzeitig verwendet werden. Sie alle teilen die gleiche Instanz des Prozesses.

Das heißt, Ihre Business-Logik nicht nur Refactoring hinaus in gemeinsamen Einheiten werden müssen, müssen die Instanzen der Business-Logik der Lage sein, in den Speicher residieren mehrere Male, und nicht stören.

Das beginnt mit der Business-Logik, dass die Gespräche mit der Datenbank. Sie in der Lage sein muss, mehrere Datenbankverbindungen zur gleichen Zeit haben (in der Praxis ein Pool von Datenbankverbindungen am besten)

Nach meiner Erfahrung, wenn Sie Ihre Geschäftslogik in Datamodules Refactoring können, haben Sie einen guten Ausgangspunkt sowohl eine Intraweb und Thick-Client-Version Ihrer Anwendung zu unterstützen.

Sie sollten nicht die Benutzeroberfläche vergessen:

  • Thick Clients unterstützen modale Formulare, und haben eine viel reichere UI
  • Web-Browser unterstützen nur Nachricht Dialoge (und dann: diejenigen, sind sehr begrenzt), alle Phantasie UI-Sachen viel Entwicklungszeit kostet (wenn zum Beispiel TMS hat einige schöne Komponenten für Intraweb )

Dann, um die Ganze abzurunden, können Sie mit der staatenlosen Natur des HTTP-Protokolls zu bewältigen haben. Um dies zu überwinden, müssen Sie Sitzungen. Intraweb kümmert sich um den größten Teil der Sitzung teil.
Aber Sie müssen sich Fragen wie diese stellen:

  • , was passieren soll, wenn ein Benutzer für XX Minuten im Leerlauf ist?
  • wie vielen Sitzungszustand kann ich im Speicher ablegen? und was, wenn es nicht paßt?
  • Was kann ich tun mit dem Sitzungsstatus, die nicht in den Speicher passen?

Dies ist nur ein Anfang, so läßt Verwendung wissen, wenn Sie weitere Informationen benötigen.
Wenn es sehr spezifisch für Ihre Anwendung wird, können Sie mich immer in Verbindung:. Just me google

- jeroen

Andere Tipps

Ich denke, wenn Sie Ihre Anwendung auf n-Ebene bewegen wird eine bessere Lösung sein, wird es leichter sein, dass nach den Desktop- und Web-Anwendungen verwendet werden.

Sie bereits den ersten Teil durch die Entkopplung der Geschäftslogik von der Präsentation, können Sie RemObject SDK oder DataSnap dass mit Delphi gebündelt.

nach, dass Sie haben Desktop-Anwendung arbeiten, und Sie können Intrawebm Asp.net oder was auch immer für Webpart verwenden und auf diese Weise werden Sie nicht die Geschäftslogik wieder für den Web-Teil duplizieren müssen.

in der Regel Desktop-Anwendung auf dem Web-Umwandlung ist nicht einfach, wie Sie dachten, weil sie in anderen Umgebung arbeiten, und Sie müssen jedes wie es der Natur bauen.

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