Sandbox Geschrieben 9. April 2012 Teilen Geschrieben 9. April 2012 Hallo zusammen, ich habe das Problem, dass ich nicht wirklich weiß, welche Methode in welcher Klasse am besten geeignet ist. Wie strukturiere ich meine Klassen? Ich programmiere in C#, das sollte aber keine Rolle spielen. Ich programmiere ein Tool mit dem User verwaltet werden. Ich habe bis jetzt eine Klasse "User" in der ich die User Daten (Name, Telefon..) mit Getter und Setter kapsle. Um einen User zu Speichern habe ich eine Methode "saveUser". Um die Daten für einen bestimmten User zu laden habe ich einen überladenen Konstruktor in dem ich eine ID mitgeben kann, sodass dieser dann über die Methode "loadUser" geladen wird. Zudem gibt es noch weitere Methoden die im weiteren Verlauf notwendig sind. z.b: "LoadCalendar" - userspezifisch Nun habe ich ein Verständnisproblem!! Ich benötige für eine Übersicht alle User aus der Datenbank. Natürlich kann ich das über ein SQL Statement laden, aber wie kann ich hier die Klasse "User" nutzen? Ist es sinnvoll/gängige Praxis, dass ich nun eine Methode "loadAllUser" in der Klasse "User" implementiere? Somit müsste ich ein Objekt vom Typ "User" erstellen um alle Daten zu erhalten?!? --> Kann ich mir jetzt nicht vorstellen! Oder muss ich mir hier eine Klasse "Users" definieren, dort die Methode "loadAllUsers" die mir dann alle User als Objekte zurückgibt? Wenn ja, wäre dies dann ein Array? Wie würde diese Klasse aussehen? Wie Lade ich dann meine Objeke vom Typ "User"? Das sind jetzt vieleicht viele Fragen, aber vieleicht kann mir hier jemand helfen. Gruß, Sandbox Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sandbox Geschrieben 9. April 2012 Autor Teilen Geschrieben 9. April 2012 Hallo, um es vieleicht anders auszudrücken: Ich habe Objekte mit objektspezifischen Methoden und Variablen. Was muss ich tun wenn ich Methoden habe die über ein Range dieser Objekte geht. z.B.: Irgendeinen Durchschnitt berechnen. Gruß Sandbox Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 9. April 2012 Teilen Geschrieben 9. April 2012 Die knappe Antwort: beschäftige dich mit den grundlagen der Objektorientierung, Single Responsibility Pattern, Repository Pattern und Entity Framework. Ausführlich: Dein Problem ist, dass du die grundlegenden Prinzipien der Objektorientierung noch nicht verstanden bzw. verinnerlicht hast. Jede Klasse sollte nur eine Aufgabe haben. Und eine Klasse User ist nicht dazu da, um auch direkt noch User zu verwalten. Z.B. könntest du dafür eine Klasse UserRepository einführen, die User speichert, lädt, anlegt usw. Beispiel in C# public class User { public string Name {get; set;} public int Age {get; set; } } public class UserRepository { public IEnumerable<User> GetAllUsers() { //Deine Implementierung inkl. Datenzugriffstechnologie //Beispiel Entitiy Frameworks using(var context = new DbContext()) { return context.Users.toList(); } } } Was deine Frage bezüglich des Durchschnitts angeht: Du hast doch hier eine klare fachliche Funktion die du also separat kapseln kannst, z.B. in eine Klasse UserCalculations: public class UserCalculations { public int UserAgeAverage() { var userRepo = new UserRepository(); var users = userRepo.GetAllUsers(); int sumAge; foreach(var user in users) { sumAge += user.Age; } return sumAge / users.Count; } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sandbox Geschrieben 10. April 2012 Autor Teilen Geschrieben 10. April 2012 Danke SilentDemise! Mit der objektorientierten Programmierung muss ich mich wirklich noch näher auseinandersetzen. Vielen Dank, das hilft mir sehr viel weiter! Gruß, SandBox Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.