Java eigne Klasse (Bücher ausleihen)?
Hi, also ich soll eine Klasse erstellen nach folgenden Kriterien:
Erstmal sry für den vielen Text, wollte nicht , dass durch das Zusammenfassen mögliche wichtige Informationen verloren gehen ;)
Nun sieht mein Ansatz bis jetzt so aus:
public class Book {
private String author;
private String title;
private LocalDate returnDate;
private String status;
public Book(String author, String title, String Status) throws IllegalArgumentException{
setAuthor(author);
setTitle(title);
setReturnDate(returnDate);
setStatus(status);
}
private static boolean checkAuthor(String author){
return (author.matches("[a-zA-ZäÄöÖüÜß ]") && author.length() >= 2);
}
private static boolean checkTitle(String title){
return (title.length() >= 1 && title.length() < 10);
}
public static boolean checkReturnDate(LocalDate returnDate){
return ( );
}
public static boolean checkStatus(String status){
return (status.equals("rent") || status.equals("not rent"));
}
public final void setAuthor(String author) throws IllegalArgumentException{
if(!checkAuthor(author)){
throw new IllegalArgumentException("author not valid: "+ author);
}
this.author = author;
}
public final void setTitle(String title) throws IllegalArgumentException{
if(!checkTitle(title)){
throw new IllegalArgumentException("title not valid: "+ title);
}
this.title = title;
}
private void setReturnDate(LocalDate returnDate) throws IllegalArgumentException{
if(!checkReturnDate(returnDate)){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy");
throw new IllegalArgumentException("Return Date not valid: " + returnDate.format(dtf));
}
this.returnDate = returnDate;
}
private void setStatus(String status){
if(!checkStatus(status)){
throw new IllegalArgumentException("Status not valid:" + status);
}
this.status = status;
}
Mir fehlt noch eine Check Methode für LocalDate returnDate, hier bin ich nicht so ganz weiter gekommen.
Nun war meine Idee eine Unterklasse zu erstellen die von der Klasse Book erbt. In dieser soll dann der ganze Vorgang mit Ausleihen usw geschehen . Macht dies so Sinn?
Sollte ich dann returnDate erst in dieser erstellen?
man könnte dann das Attribut Status auch in die rentbook packen, würde mehr sinn machen, oder?
man könnte dann das Attribut Status auch in die rentbook (so würde ich die Unterklasse dann nennen) packen, würde mehr Sinn machen, oder?
Dann wäre für mich jetzt noch die Frage, wie es gemeint ist mit "Buch ausleihen"
Hierfür eine Methode schreiben, die den Status auf rent setzt ?
und fürs zurückgeben eine die überprüft ob der Status einen rentbook Objekts "rent" ist und diesen dann auf "not rent" setzt ?
1 Antwort
Nun war meine Idee eine Unterklasse zu erstellen die von der Klasse Book erbt. In dieser soll dann der ganze Vorgang mit Ausleihen usw geschehen . Macht dies so Sinn?
Nein.
Book ist ein Value Object und sollte möglichst "dumm" gehalten werden.
Aufgabe dieser Klasse ist es nur Werte zu haben.
Jegliche Logik sollten über andere Klassen organisiert werden.
Werte haben, Werte setzen (Setter), Werte auslesen (Getter), mehr sollte die Klasse Buch nicht beinhalten.
Die ganzen Methoden vowegen Check Author, Title etc. und die Überprüfungen innerhalb Deiner Setter Methoden, gehören alle nicht in die Buch Klasse.
Das gehört alles in eine Klasse, die für die Logik zuständig ist (BuchManager oder wie man die auch nennen möchte).
Diese Klasse ruft dann über die Getter die Daten eines Buches ab und setzt/verändert sie über die Setter.
Alles was mit den Daten angestellt wird -> die ganze Logik (Checks, Änderungen etc.) findet in dieser Manager Klasse statt.
Nicht in der Buch Klasse.
Achso, also müsste dann in der Klasse Book , nur die Set (für author, title, returndate, Status) und get (für author, title, returndate, Status) Methoden enthalten sein? Die checken Methoden kommen dann in eine eigene Klasse. Muss ich dann in dieser Klasse auch Methoden erstellen, die für das Ausliehen zuständig sind, bzw die dann die Werte von status und returndate verändern?