2009-08-18 2 views
2

Wenn ich Datenbankabfragen in eine Klasse lege, die ein reales Weltobjekt darstellt, verstößt dies gegen die Entwurfsregel, dass Entitäten keinen Zugriff auf Datenquellen haben dürfen? HierIst es eine gute Idee, Datenbankabfragen innerhalb einer Datenklasse zu haben?

ist ein Beispiel

class User 
{ 
    public function register 
    { 
    } 

    private function save_user_data() 
    { 
    // database queries here, either in AR or ORM 
    } 
} 
+1

Wenn Sie eine Designregel haben, die besagt, dass Entitäten keinen Zugriff auf Datenquellen haben dürfen, und Sie eine Entität erstellen, die Zugriff auf ihre Datenquelle hat, würde ich sagen, dass die Regel verletzt wurde. Wolltest du nicht fragen, ob so etwas gut ist? – inerte

+0

Ich könnte es so gemeint haben ... hm ... aber wenn ich ORM verwende, bedeutet das, dass die ORM-Bibliothek die Anfragen für mich erledigt. Setzt man ORM-Methoden in diese Klasse genauso ein wie Abfragen dort? – yretuta

Antwort

2

(Complete [1,2]-Code) Steve McConnell zitieren:

Sofware Primary Technische Imperative verwaltet Komplexität.

Wenn Sie eine große App schreiben, reduziert sich auf lange Sicht die Komplexität des abstrakten Datenzugriffs. Wenn Sie eine kleine bis mittelgroße App schreiben, ist es möglicherweise sinnvoller, Ihren Datenzugriff innerhalb des Objekts selbst vorzunehmen, solange Sie damit klar und konsistent sind.

Reduzieren Sie die Komplexität auf sinnvolle Weise.

+0

+1 Manchmal wünsche ich mir wirklich eine +5 :) –

0

Ich persönlich denke, dass die Verantwortung für die Klasse Einsparung mit sich selbst sein sollte, aber der eigentliche Code ausführen, um die Datenbank die speichern sollte in einem Datenzugriff in eine Klasse gehen Schicht.

0

Nun ganz klar ja. Aber die wirkliche Frage ist, ob diese Regel zählt? Hängt davon ab, nehme ich an.

Persönlich verwende ich nur ein ORM, um all diese Sachen für mich zu generieren. LLBLGen.

Verwandte Themen