Ich weiß, dass es eine schlechte Programmierung und Architektur ist, wenn man ein Klassenobjekt hat, das nur an einer Stelle verwendet werden soll. Aber ich bin auch davor gewarnt worden, ein Objekt zu schaffen, das zu mächtig ist und zu viel kann. Wie kann ich das also aufschlüsseln? Hier ist ein Beispiel für das, was ich meine - bitte nehmen Sie diese Dinge nicht wörtlich, denn es ist nur ein Beispiel.
Jedenfalls habe ich ein Objekt, mit dem ich arbeite, das ziemlich komplex ist. In diesem Objekt sind viele Informationen gespeichert, und es kann viele Manipulationen an den Daten vornehmen. Nennen wir dieses Objekt also Erde.
Public Class Planet
Private _population As UInteger = 0
Public ReadOnly Property Population() As UInteger
Get
Return _population
End Get
End Property
Public Overridable Sub CreatePerson(Optional ByVal numberOfPeople As Integer = 1)
_population += numberOfPeople
End Sub
End Class
So weit, so einfach. Aber ich könnte noch viele weitere Dinge aufzählen, die dieses Objekt möglicherweise leisten könnte. Um die Dinge nicht zu komplex werden zu lassen, habe ich die "Aktivitäten", die während des Tages und der Nacht stattfinden, in zwei weitere Objekte aufgeteilt: Tag und Nacht (diese beiden sind nicht abgebildet). Jetzt habe ich also eine aktualisierte Planetenklasse.
Public Class Planet
Private _population As UInteger = 0
Private _day As New Day
Private _night As New Night
Public ReadOnly Property Day() As Day
Get
Return _day
End Get
End Property
Public ReadOnly Property Night() As Night
Get
Return _night
End Get
End Property
Public ReadOnly Property Population() As UInteger
Get
Return _population
End Get
End Property
Public Overridable Sub CreatePerson(Optional ByVal numberOfPeople As Integer = 1)
_population += numberOfPeople
End Sub
End Class
Diese beiden Klassen - Tag und Nacht - werden nun niemals außerhalb der Planetenklasse verwendet werden. Ist dies ein guter Weg, um meine Methoden und Attribute für diese "übergeordnete" Klasse Planet zu organisieren? Wie könnte ich sonst eine solche Ordnung schaffen?
Ich habe über Refactoring gelesen, aber ich glaube nicht, dass das in meinem Fall hilft. Mir gefällt die Idee, dass ich ein Planet-Objekt wie dieses aufrufen kann: Earth.Night.BlowUpMoon
.