Announcement

Collapse
No announcement yet.

VisualStudio - ähnliche Applikation zusammenführen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VisualStudio - ähnliche Applikation zusammenführen

    Hallo,

    hoffentlich drücke ich mich nicht zu umständlich aus mit meinen Problem. Ich stelle gerade 2 VB.Net Anwendungen auf VS2010 um. Die Applikationen sehen gleich aus und haben auch eine ähnliche Funktion. Es werden Daten aus einer Oracle Datenbank ausgelesen und dann eine Textdatei erstellt.

    Die Forms sehen gleich aus, nur die SQL's dahinter sind unterschieldlich. Also versuche ich einen Solution anzulegen die 2 Projekte beinhaltet. Beide haben meine View (Name MainApp) sowie jeweils eine spezifische Klasse (clsDebit bzw. clsCheques). Durch das builden möchte ich dann die MainApp.EXE erhalten sowie die spez. Klasse.

    Das klappt soweit. Nur wie schaffe ich es bei der MainForm MainApp.exe als Text den jeweiligen Anwendungsnamen anzuzeigen, genauer die Information aus der spez. Klasse zu holen. Die spez. Klasse nur unter einem Namen laufen zu lassen ist evtl. verwirrend da es zu Verwechselungen kommen kann. Über ein Vererbungskonstrukt das zu realisieren wäre mit auch schon eingefallen, aber ob das schön ist? Evtl. bin ich ja mit meinen Ansatz einfach 2 Projekte innerhalb einer Solution zu verwenden auf einem falschen Weg. Im Bereich VB.Net bin ich Neuling und stelle es mir evtl. zu einfach vor. Daher bin ich für jeden Tipp dankbar.

    Danke schon mal im voraus
    mark01

  • #2
    Hallo und willkommen im Forum,

    ich hab den Text nur überflogen, aber für mich schaut das nach Plug-In-Muster aus. Schau dir das zusammen mit Dependency Injection / Inversion of Control mal an.

    Mehr als die Stichworte kann ich auf die Kürze nicht geben, aber wenn du diese gelesen hast wirds dir eh selber klar werden


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Wie sagt Klitschko zu seinem Bruder -> Schwere Kost ;-)

      Hab' mal ein wenig gegoogelt was ich so zu dem Thema finde. So auf den ersten Blick recht komplex. Dependency Injection mit LightCore bzw. Unity und den Artikel von Jürgen Gutsch. Zusätzliche Frameworks darf ich nicht verwenden, aber ich schaue mir die allg. Beispiele noch an. Plug-In-Muster kenne ich bisher nur als Erweiterung für Eclipse bzw. Allgemeine Entwicklungsumgebungen.

      Danke erst mal für den Hinweis
      Gruß

      Comment


      • #4
        Hallo,

        Dependency Injection mit LightCore bzw. Unity
        Das ist (leider) schon ein Fehler. Nicht die Produkte an sich - die sind gut - aber das Gleichsetzen von Dependency Injection (DI) mit einem Container wie LightCore. DI ist auf zB auf Wikipedia ganz gut erklärt. Ein Container ist nur ein Hiflsmittel um das umzusetzen.

        Schau auch mal [FAQ] Eigene Anwendung pluginfähig machen an.

        Wie sagt Klitschko zu seinem Bruder -> Schwere Kost ;-)



        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Ok,

          bin nun etwas schlauer... Habe mich für DI über interface entschieden und mal einen kleinen Test gebaut. Meine erste Klasse im Package AuthDebit sieht so aus

          Code:
          Imports MainAppl
          Public Class clsAutDebit
              Implements MainAppl.IBusinessLogic
          
              Public Function getAppName() As String Implements MainAppl.IBusinessLogic.getAppName
                  Return "Automatic Debit"
              End Function
          End Class

          Mein Package MainApp enthält 2 Klassen

          Code:
          Public Interface IBusinessLogic
              Function getAppName() As String
          End Interface
          
          Public Class BusinessFacade
              Private m_businessLogic As IBusinessLogic
              Public Sub New(ByVal businessLogic As IBusinessLogic)
                  Me.m_businessLogic = businessLogic
              End Sub
          
              Public Function getAppName() As String
                  Return Me.m_businessLogic.getAppName()
              End Function
          
              Public Property BusinessLogic() As IBusinessLogic
                  Get
                      Return m_businessLogic
                  End Get
          
                  Set(ByVal value As IBusinessLogic)
                      m_businessLogic = value
                  End Set
              End Property
          
              Public Sub SetBLObject(ByVal businessLogic As IBusinessLogic)
                  Me.m_businessLogic = businessLogic
              End Sub
          End Class
          sowie die eigentliche Form MainApp

          Code:
          Public Class frmMain
          
              Private mFacade As BusinessFacade
          
              Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                  Dim otherClass As clsAuthDebit
                  mFacade = New BusinessFacade(otherClass)
                  Me.Text = mFacade.getAppName
              End Sub
          End Class
          Und hier gneau liegt auch mein Problem. Irgendwie muß ich es schaffen nun meine Klasse clsAuthDebit bzw im anderen Fall clsCheques zu instanziieren. Die liegt nun aber ja im anderen Package und dazu müßte ich ja dann wieder dieses Package importieren. Irgendwie hab' ich nun doch noch nicht den Durchblick. Ich habe mal das Projekt als zip angehängt und hoffe auf einen Hinweis. Danke schon mal im voraus.
          Attached Files

          Comment


          • #6
            Hallo,

            Irgendwie muß ich es schaffen nun meine Klasse clsAuthDebit bzw im anderen Fall clsCheques zu instanziieren. Die liegt nun aber ja im anderen Package und dazu müßte ich ja dann wieder dieses Package importieren.
            Genau hier ist der springende Punkt bei PlugIns. Alle möglichen "Packages" werden nicht zur Entwicklungszeit importiert/referenziert sondern dynamisch zur Laufzeit das entsprechende geladen.

            Dies funktioniert über Reflektion und Activator.CreateInstance. Dieser Methode wird der benötigte Type übergeben und du bekommst eine Instanz zurück. Da es aber eher unpraktisch dieses immer wieder selbst zu erledigen gibt es DI-Container (du die auch in einem Vorpost erwähnt hast) welche diese Arbeit abnehmen. Such dir einen beliebigen Container (zB LightCore) der Komponenten per Name registrieren kann.

            D.h. in der Anwendung wird je nach Namen der Komponente vom DI-Container die richtige (und vorher registrierte) Komponente zurückgegeben.

            Als einfaches Beispiel (wenn auch kein sinnvolles):
            In einer Geschäftsanwendung sollen Rechnungen kundenspezifisch gedrucht werden. Für jeden Kunden gibt es ein Plug-In und dieses wird anhand der Kunden-Nr geladen.

            Ist es dir klarer geworden?

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Klarer noch nicht unbedingt, aber ohne fleiss keinen Preis. Kurz habe ich mal bei msdn reingeschaut und zumindest etwas bekanntes wiedererkannt. Schaue mal morgen genauer rein. Freitag sollte ich zwar mit der Umstellung fertig sein, aber mal schauen ob nocht etwas Budget übrig ist für ein paar Tage mehr ;-)

              Danke schon mal

              Comment

              Working...
              X