Abhängigkeit zwischen zwei Klassen

Es gibt 39 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    Abhängigkeit zwischen zwei Klassen

    Ich stehe momentan vor folgendem Problem und zwar habe ich eine Klasse namens Main. In dieser Klasse wird die Verbindung zu einem Webservice hergestellt. Nun habe ich eine andere Klasse namens Entry. Mit dieser Klasse kann ich Einträge im Webservice erstellen, dazu benötige ich aber die Variable aus der Klasse Main, mit der ich die Verbindung hergestellt habe. Kann mir da jemand weiterhelfen?
    Pseudocode:

    Quellcode

    1. class Main
    2. {
    3. Entry entry;
    4. Main()
    5. {
    6. Connection webConnection = new Connection("ipblahwhatever");
    7. this.entry = new Entry(ref webConnection);
    8. }
    9. }


    Problem liegt wo?
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Entry ist immer nur ein Eintrag.

    Kurzes Beispiel

    Main.vb

    VB.NET-Quellcode

    1. Public Class Main
    2. Private mWebservice As Object
    3. Public Sub New()
    4. MyBase.New()
    5. Me.mWebservice = New Object()
    6. End Sub
    7. Public Sub Connect()
    8. ' Hier wird die Verbindung hergestellt.
    9. Me.mWebservice.Connect("TestApp", "secretkey")
    10. End Sub
    11. End Class


    Entry.vb

    VB.NET-Quellcode

    1. Public Class Entry
    2. Public Property Name As String
    3. Public Sub New()
    4. MyBase.New()
    5. End Sub
    6. Public Sub Add()
    7. ' Hier sollte nun der Webservice aufgerufen werden und der Eintrag hinzugefügt werden+
    8. End Sub
    9. End Class
    Main.vb

    VB.NET-Quellcode

    1. Public Class Main
    2. Public Shared Instance As Main
    3. Public mWebservice As Object
    4. Private Sub New()
    5. MyBase.New()
    6. Me.Instance = Me
    7. Me.mWebservice = New Object()
    8. End Sub
    9. Public Shared Function CreateInstance() As Main
    10. Return New Main()
    11. End Function
    12. Public Sub Connect()
    13. ' Hier wird die Verbindung hergestellt.
    14. Me.mWebservice.Connect("TestApp", "secretkey")
    15. End Sub
    16. End Class


    Entry.vb

    VB.NET-Quellcode

    1. Public Class Entry
    2. Public Property Name As String
    3. Public Sub New()
    4. MyBase.New()
    5. End Sub
    6. Public Sub Add()
    7. Main.Instance.mWebservice......
    8. End Sub
    9. End Class
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Chrisber“ ()

    Warum gibst Du nicht bei .Add() die Variable mit?
    Also
    Entry.vb

    VB.NET-Quellcode

    1. Public Class Entry
    2. '...
    3. Public Sub Add(ByVal Foo As Bar)
    4. DoSomething(Foo)
    5. End Sub
    6. End Class
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Erkläre dein Problem. Mein Ansatz ist OOP (Singleton).
    Ich denke eher, du hast ein falsches Code-Design...
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Mir geht es um das Code-Design. Vermutlich wurde uns in der Schule auch was völlig falsches darüber erzählt, aber das ist erst mal Nebensache.

    Die Methode Add in der Klasse Entry fügt sich, also Me, dem Webservice hinzu. Um den Eintrag dem Webservice hinzufügen zu können, benötige ich die Variable in dem der Webservice offen ist.

    VB.NET-Quellcode

    1. Public Class Entry
    2. Public Property Name As String
    3. Public Sub New()
    4. MyBase.New()
    5. End Sub
    6. Public Sub Add()
    7. ' Hier sollte nun der Webservice aufgerufen werden und der Eintrag (Me) hinzugefügt werden
    8. End Sub
    9. End Class


    VB.NET-Quellcode

    1. Dim entry As EventEntry = Nothing
    2. entry = New EventEntry()
    3. entry.Add()

    VB.NET-Quellcode

    1. Public Class Entry
    2. Public Property Name As String
    3. Public Sub New()
    4. MyBase.New()
    5. End Sub
    6. Public Sub Add(ByVal main As Main)
    7. main.mWebservice....
    8. End Sub
    9. End Class


    VB.NET-Quellcode

    1. Dim entry As EventEntry = Nothing
    2. entry = New EventEntry()
    3. entry.Add(main)


    Wo ist das Problem?
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Für mich klingt es irgendwie unlogisch, wenn ein Entry sich dem Webservice hinzufügt. Ich würde es eher umgekehrt machen.
    Beispiel (mit Obst ^^ :(

    VB.NET-Quellcode

    1. Class Apfel ' Entry
    2. End Class
    3. Class Korb ' WebService
    4. Public Sub Add(Apfel obj)
    5. End Class
    6. ' Denn der Korb fasst Äpfel (er kann sie "adden"),
    7. ' aber Äpfel können nicht von selbst in den Korb.

    Für mich klingt das viel logischer, aber vllt. habe ich auch was total falsch verstanden.

    Viele Grüße, Phil.
    Ich versuch es so gut wie möglich zu erklären.

    Ich habe einen Webservice in PHP, diesen habe ich in einer Klasse namens Main grob abgebildet. Der Webservice hat x Einträge. Ich kann Einträge hinzufügen, aktualisieren und löschen. Jeder Eintrag hat die gleichen Eigenschaften, diese habe ich in der Klasse Entry abgebildet. Jeder Eintrag benötigt den Webservice um hinzugefügt, aktualisiert oder gelöscht zu werden. Nun habe ich mir überlegt, das dazu eine EntryCollection, die von CollectionBase erbt, gut geeignet dazu ist.
    Speichere die Instanz im Konstruktor von Entry ab. Fertig. Ich habe echt keine Ahnung, was du mit einer CollectionBase machen willst.
    Mir ist auch gerade nicht ganz verständlich, wie du so ein triviales, oft auftretendes Problem mit annähernd 6000 Beiträgen und x veröffentlichten Programmen nicht lösen kannst? Aber gut.
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Ich hab hier jetzt nochmal ein Beispiel, wie ich das mit der Collection genau meine.

    VB.NET-Quellcode

    1. Public Class Main
    2. Private mWebservice As Object
    3. Private mEntryCollection As EntryCollection
    4. Public ReadOnly Property Entries As EntryCollection
    5. Get
    6. Return Me.mEntryCollection
    7. End Get
    8. End Property
    9. Public Sub New()
    10. MyBase.New()
    11. Me.mWebservice = New Object()
    12. Me.mEntryCollection = New EntryCollection(Me)
    13. End Sub
    14. Public Sub Connect()
    15. ' Hier wird die Verbindung hergestellt.
    16. Me.mWebservice.Connect("TestApp", "secretkey")
    17. End Sub
    18. End Class


    @Chrisber: Ich habe mir in all den Jahren vieles selber beigebracht. Teilweise haben wir das auch in der Berufsschule gelernt, aber ich glaub nicht, das der Lehrer das richtig erklärt.
    Das hat YaPh1l schon geschrieben:
    Lass das Obst nicht sich selbst in den Korb legen, sondern gib dem Korb das Obst:

    VB.NET-Quellcode

    1. Dim Foo As New Main
    2. Sub Bar()
    3. Foo.Add(DerEintrag)
    4. End Sub


    So wie Du es im Moment machst:

    VB.NET-Quellcode

    1. Dim Foo As New Main
    2. Sub Bar()
    3. DerEintrag.Add(Foo)
    4. End Sub
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils