Generell zu Klassen

david07

Mitglied
Hi,

habe mal eine allgemeine Frage zu Klassen.

Für ein Projekt benötige ich häufig sehr viele Datenbank-Querys.
Ist es sinnvoll/möglich eine globale Klasse für querys zu schreiben und später die daten über andere klassen zu verarbeiten?

nach folgendem Prinzip:

Code:
Class Mysql {

 function insert($value)
  {
  //in DB schreiben
  }
  ......
}

Class Daten_verarbeiten{

function mysql_initialisieren()
  {

   }
 
function daten_schreiben($value)
  {
  //mysql::insert  -> daten schreiben!
  }
  ......
}


Ich hoffe ich ich konnte es einigermaßen verständlich erklären was ich meine...
Was denkt Ihr? Ist das so sinnvoll/möglich? wie löst ihr das?

Ich möchte es irgdnwie vermeiden in jeder klasse (das projekt besteht aus vielen eigenen modulen) ständig datenbankquerys zu schreiben.

Danke schonmal!
 
Hallo,

sowas ist schon sinnvoll.
Vor allem, wenn du vorher ein Interface definierst, welches angibt welche Methoden die Klasse enthalten soll.
Wenn du das überall dann nur das Interface nutzt um auf die Methoden zuzugreifen und eine Factory um das Object zu erstellen, könntest du nachher so leicht die Datenquelle wechseln.

Falls du nicht ganz verstanden hast, kann ich dir mal ein Beispiel bringen.

Gruß

Sascha
 
Ich denk er will eher eine Klasse haben die er einmal startet und dann überall verfügbar ist.
Dafür würden sich das Singleton bzw Registry Pattern eignen.
 
@wod2008
Sowas lässt sich auch durch eine Factory lösen.
Er hat sie überall verfügbar und muss nur an einer Stelle was ändern, falls er die Datenquelle ändern möchte.
Hier ist mal ein Beispiel. Ist zwar in Java, aber leicht portierbar auf PHP, da die Syntax fast gleich ist.

Java:
public interface DataAccessObject {

	public void insert(Object object);
	public void delete(int id);
	public Object getById(int id);
	
}


Java:
public class MySqlDAO implements DataAccessObject {

	MySqlDAO() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void delete(int id) {

	}

	@Override
	public Object getById(int id) {
		return null;
	}

	@Override
	public void insert(Object object) {
	}

}


Java:
public class DAOFactory {

	private static DataAccessObject instance = null;
	
	public static DataAccessObject getDAO(){
		if(instance ==null)
			instance = new MySqlDAO();
		return instance;
	}
	
}


Java:
public class TestKlasse {

	public static void main(String[] args) {
		
		DataAccessObject dao = DAOFactory.getDAO();
		
		dao.insert("Hallo");
		
	}
	
}


Also das DAO sollte schon bessere und mehr Methoden haben, hab es nur schnell zusammen geschrieben, um es deutlich zu machen.
So muss er halt nur in der Factory was ändern, wenn er die konkrete Implementierung tauschen möchte. Durch die Factory hat er das DAO auch überall zur Verfügung.

Gruß

Sascha
 
Hi,

wow das ist schonmal echt klasse Versuche grade das Prinzip nachzuvollziehen. Der Grundgedanke ist genau das was ich vor hatte @Sascha Schirra


Ich verstehe aber diese Zeile nicht ganez:

DataAccessObject dao = DAOFactory.getDAO();

Ich kenne den Punkte "." in PHP eig. nur als Stringverbindung. Bin mir gerade nicht ganz klar wie der Punkt in bezug auf Methoden und Objekte arbeitet. Ist mir eig. nur aus JS bekannt....

Gruß
 
@david07

Wenn du das so umsetzt, wie ich es oben gezeigt habe, solltest du nur drauf achten, dass du immer, wenn du eine Instance des DAOs brauchst, die Factory nutzt und nicht ein new DAO() machst.


Gruß

Sascha
 
Der Punkt(bei DataAccessObject dao = DAOFactory.getDAO();) steht hier für den :: in PHP, da man eine statische Funktion aufrufen will.
 
Zurück