Einfacher Methodenaufruf vs. Objekt

Lupus93

Mitglied
Hallo

Da ich meinen Code langsam mal so gestalten möchte, dass er durchaus als Endfassung ansehbar ist,
habe ich hier mal eine eher allgemeine Frage.
Es geht um die Benutzung einer Methode einer Klasse.
Wie mache ich es nun richtig?
Funktionieren sollte beides.
Zur Zeit mache ich es so:

Java:
import java.io.*;

public class Log implements Serializable {

	public static void writeLog(String logstring) {

		String sport = DB.speicherort(); // Beschafft Speicherort
		File log = new File(sport + "Log");
		Writer fw = null;

		try {
			fw = new FileWriter(log);
			fw.append(logstring);
			fw.append(System.getProperty("line.separator"));
			fw.close();
		} catch (IOException e) {
			System.err.println("Konnte Datei nicht erstellen");
		}

	}

}

Der Aufruf erfolgt mit:
Java:
 Log.writeLog("test");
Im Sinne der OOP müsste man dies doch aber eher so machen:

Java:
import java.io.*;

public class Log implements Serializable {
String logstring;

Log(String lstring){
logstring=lstring;
}
	void writeLog() {

		String sport = DB.speicherort(); // Beschafft den Speicherort
		File log = new File(sport + "Log");
		Writer fw = null;

		try {
			fw = new FileWriter(log);
			fw.append(logstring);
			fw.append(System.getProperty("line.separator"));
			fw.close();
		} catch (IOException e) {
			System.err.println("Konnte Datei nicht erstellen");
		}

	}

}

Hiernach dann ein Objekt erzeugen, als Parameter den zu sichernden String und danach die Methode aufrufen.
Also, wie machen die Profis das? 😉

grüße
 
hier mal meine 5 cents als amateur 😉

Eine "Log-Klasse" kann|darf und sollte statische Methoden anbieten. Imho macht es wenig Sinn, davon ein Objekt erstellen (zu müssen) um dann eine Methode aufrufen zu dürfen.
 
Da kann man gespaltener Persönlichkeit darüber sein, bei kleineren Projekten hat jgh sicher recht.

Sobald du z.B. Dependency Injection (Guice, Spring, CDI...) zur Verfügung hast, wird der OO-Ansatz wieder attraktiver, dann sähe die Anwendung nämlich ungefähr so aus:

Java:
public class Foo {
    @Inject
    private Log log;  //Magie!!!

    public void bar(String s) {
        ...
        log.writeLog(s + " hat Pimpeln!");
    }
}

Welche Log-Klasse (falls Log ein Interface ist), und wieviel Instanzen (normalerweise eine, also ein Singleton) verwendet werden, wird woanders entschieden (bei Guice in einem "Modul", also einer Art Konfigurationsklasse, bei Spring in einer XML-Datei), deine Foo-Klasse weiß nichts darüber, außer, dass es Log benutzen kann.
 
Zuletzt bearbeitet:
Hallo

Danke für die Antworten, also könnte es so bleiben...
Geplant war bei der kleinen Anwendung einfach nur den Zeitstempel und den SQL-Befehl zu loggen,
um erstens zu sehen wann was gemacht wurde und zweitens bei einem Datenverlust diese evtl. aus der Log-Datei wieder herstellen zu können...
Aber ich schau mir log4j mal an, klingt sehr interessant!

grüße
 

Neue Themen


Zurück
Oben