How To: Abstraktion am praktischen Beispiel Teil 1
Da ich in der Vergangenheit oft bemerke, das viele Probleme haben mit der Abstraktion von Code, möchte ich hier eine kleine Serie beginnen um zu zeigen wie ich vor gehe und woran man deutlich erkennt, dass es ein Anhaltspunkt für eine Abstraktion ist.
Zu erst einmal ein Beispiel aus meinem aktuellen Projekt:
hier wird einmal die Zeile übergeben und damit der Content generiert, wird aber kein Element aus der Datenbank gelesen, wird hier eine leere Inputzeile gerendert und angezeigt.
Ich habe hier im Zuge des Abstraktion gleich noch die gerenderten Inhalten der _createInputField an die View übergeben, da hier ein extra persistieren in einer Variable nicht notwendig ist und nur wieder mehr Redundanz verursacht.
Wichtig ist bei einer Abstraktion aber immer das Augenmerk auf die Les und Wartbarkeit des Codes. Es ist in erster Linie wichtiger den Code wartbar und lesbar zu halten, als ihn maximal zu abstrahieren und so wenig wie möglich redundanz zu haben!
Ich hoffe ich konnte mit dem Beispiel dem einen oder anderen behilflich sein. Demnächst wird noch ein umfangreicheres Beispiel aus dem selben Projekt für den selben Zweck hier präsentiert, was aber umfangreicher ist. Dort wird aus verschiedenen Datenbanken mit der selben Struktur Content gezogen um damit Templates zu füllen.
Bis dahin
Zu erst einmal ein Beispiel aus meinem aktuellen Projekt:
PHP
public function indexAction(){
$oNahrungsmittelXMasseinheitenDbTable = new Application_Model_DbTable_NahrungsmittelXMasseinheit();
$iMasseinheitMapId = CAD_Tool_Extractor::extractOverPath($this, 'getRequest->getParams->id');
$sContent = '';
$oNahrungsmittelXMasseinheitenRowSet = $oNahrungsmittelXMasseinheitenDbTable->findNahrungsmittelXMeasureEntry($iMasseinheitMapId);
public function indexAction(){
}
public function indexAction(){
$oNahrungsmittelXMasseinheitenDbTable = new Application_Model_DbTable_NahrungsmittelXMasseinheit();
$iMasseinheitMapId = CAD_Tool_Extractor::extractOverPath($this, 'getRequest->getParams->id');
$sContent = '';
public function indexAction(){
$sDropDownContent = '';
$oMeasuresDbTable = new Application_Model_DbTable_Masseinheiten();
$oMeasuresRowSet = $oMeasuresDbTable->findMeasures(true);
public function indexAction(){
public function indexAction(){
$oNahrungsmittelXMasseinheitenDbTable = new Application_Model_DbTable_NahrungsmittelXMasseinheit();
$iMasseinheitMapId = CAD_Tool_Extractor::extractOverPath($this, 'getRequest->getParams->id');
$sContent = '';
$oNahrungsmittelXMasseinheitenRowSet = $oNahrungsmittelXMasseinheitenDbTable->findNahrungsmittelXMeasureEntry($iMasseinheitMapId);
public function indexAction(){
$oNahrungsmittelXMasseinheitenDbTable = new Application_Model_DbTable_NahrungsmittelXMasseinheit();
$iMasseinheitMapId = CAD_Tool_Extractor::extractOverPath($this, 'getRequest->getParams->id');
if (null !== $iMasseinheitMapId) {
$oNahrungsmittelXMasseinheitenRow = $oNahrungsmittelXMasseinheitenDbTable-
>findNahrungsmittelXMeasureEntry($iMasseinheitMapId);
$this->view->assign('sContent', $this->_createInputRow($oNahrungsmittelXMasseinheitenRow));
} else {
$this->view->assign('sContent', $this->_createInputRow());
}
}
hier wird einmal die Zeile übergeben und damit der Content generiert, wird aber kein Element aus der Datenbank gelesen, wird hier eine leere Inputzeile gerendert und angezeigt.
Ich habe hier im Zuge des Abstraktion gleich noch die gerenderten Inhalten der _createInputField an die View übergeben, da hier ein extra persistieren in einer Variable nicht notwendig ist und nur wieder mehr Redundanz verursacht.
Wichtig ist bei einer Abstraktion aber immer das Augenmerk auf die Les und Wartbarkeit des Codes. Es ist in erster Linie wichtiger den Code wartbar und lesbar zu halten, als ihn maximal zu abstrahieren und so wenig wie möglich redundanz zu haben!
Ich hoffe ich konnte mit dem Beispiel dem einen oder anderen behilflich sein. Demnächst wird noch ein umfangreicheres Beispiel aus dem selben Projekt für den selben Zweck hier präsentiert, was aber umfangreicher ist. Dort wird aus verschiedenen Datenbanken mit der selben Struktur Content gezogen um damit Templates zu füllen.
Bis dahin