jobo: einzelne Getter oder eine Methode - Datenrückgabe Struktur

Beitrag lesen

Hallo,

...  Das hat aber wenig damit zu tun, dass man nach der grundlegenden OOP-Philosophie Daten und deren Methoden in ein Gebilde zusammenfassen soll.

Naja, die Frage war oder wäre für mich, ob ein Produkt wirklich als Klasse abgebildet wird, oder ein Datensatz (Array) in einer Klasse ist.

Wie gesagt, ich finde ja schon das übertriebene Trennen in Lese- und Schreib-Vorgang unsinnig.

Nun ja, beim Schreiben und Lesen dachte ich, das sei schon genau das Gegenteil. Irgendwelche Shortcuts kannst Du dir ja nach belieben immer Bauen.

Noch schlimmer wird es meiner Meinung nach, wenn beispielsweise wegen einer alphabetischen Sortierung ein Getter nicht mehr in unmittelbarer Nachbarschaft zum Setter im Quellcode notiert ist.

  
/**  
     * Returns the table object, or null if this is disconnected row  
     *  
     * @return Zend_Db_Table_Abstract|null  
     */  
    public function getTable()  
    {  
        return $this->_table;  
    }  
  
    /**  
     * Set the table object, to re-establish a live connection  
     * to the database for a Row that has been de-serialized.  
     *  
     * @param Zend_Db_Table_Abstract $table  
     * @return boolean  
     * @throws Zend_Db_Table_Row_Exception  
     */  
    public function setTable(Zend_Db_Table_Abstract $table = null)  
    {  
        if ($table == null) {  
            $this->_table = null;  
            $this->_connected = false;  
            return false;  
        }  
  
        $tableClass = get_class($table);  
        if (! $table instanceof $this->_tableClass) {  
            require_once 'Zend/Db/Table/Row/Exception.php';  
            throw new Zend_Db_Table_Row_Exception("The specified Table is of class $tableClass, expecting class to be instance of $this->_tableClass");  
        }  
  
        $this->_table = $table;  
        $this->_tableClass = $tableClass;  
  
        $info = $this->_table->info();  
  
        if ($info['cols'] != array_keys($this->_data)) {  
            require_once 'Zend/Db/Table/Row/Exception.php';  
            throw new Zend_Db_Table_Row_Exception('The specified Table does not have the same columns as the Row');  
        }  
  
        if (! array_intersect((array) $this->_primary, $info['primary']) == (array) $this->_primary) {  
  
            require_once 'Zend/Db/Table/Row/Exception.php';  
            throw new Zend_Db_Table_Row_Exception("The specified Table '$tableClass' does not have the same primary key as the Row");  
        }  
  
        $this->_connected = true;  
        return true;  
    }  
  

Das erschwert die Erfassung der Sinn-Zusammenhänge noch mehr, und das bei sowieso schon aufgeblähtem Code. Wenn man da keine IDE mit einklappbaren Codeteilen hat ...

new Product("Autor","Titel","Preis","Shortdesc","Ustklasse","basename","ISBN") aber zB. macht aus meiner Sicht nicht allzuviel Sinn oder nicht unbedingt.

Eher $Producthandler::getInstance()->addProduct(array("autor"=>"Hans","title="Titel1" etc.pp.));

Der kann dann dem Produkte gleich noch zusätzlich eine interne ID verpassen, ein Einstellungsdatum, vielleicht auch wer es eingepflegt hat etc.pp., also Systemdaten oder Metadaten hinzufügt.

Warum soll man das in einem Konstruktor nicht machen können/dürfen? Der ist für die Initialisierung der Eigenschaften eines Objekts zuständig.

Klar. Das wäre dann der Active Record. http://framework.zend.com/wiki/display/ZFPROP/Zend_Db_ActiveRecord

Gruß

jobo