2016-06-01 17 views
-2

Ich habe eine Webanwendung entwickelt, ohne ein Framework über PHP zu verwenden. Meine Anwendung hat hauptsächlich zwei Arten von Dateien - Frontends und Backends. Der erste Typ kann HTML, PHP, CSS, JavaScript (jQuery) und die Backends - nur PHP - enthalten. Ich habe eine Klasse pg_db_connection genannt, die session Verbindung mit der Datenbank und eine Klasse macht die Benutzer-Web-Session (PHP-Funktion session_start()) und halte einige Variablen wie „username“ zu erstellen, Benutzer-ID in der users Datenbanktabelle usw.Welches architektonische Muster verwende ich?

Die pg_db_connection Klasse hat eine Eigenschaft $link, die eine Datenbankressource ist, die aus pg_connect() gewonnen wird. Diese Klasse hat auch einige Funktionen wie query($query, $b_result = false, &$affected_rows = null), insert($table, $values, $columns = null, &$affected_rows = null), begin(), commit(), rollback() und mehr. Im Anfang jeder Frontend-Datei erstellen, I-Objekt vom Typ session und ausführen:

$db = new pg_db_connection($db_config,$log_mng); 
$session = new session($db); 

#if the session is not active go to login.php frontend and force the user to login 
if(!$session->is_active()) 
{ 
    header("Location: /html/admin/login.php?url=" . urlencode($_SERVER['REQUEST_URI'])); 
    exit; 
} 


# If session is active proceed below 
# Auto refresh the session 
$session->autoReresh(); 

# Check if the current user have privileges to access this frontend file (second param is file path, third - file name) 
if(!($session->passpermit($session->user_id(), $_SERVER['SERVER_ADDR'], dirname(__FILE__)."/", basename(__FILE__)))) 
{ 
    header("Location: /html/admin/access_denied.html"); 
    exit; 
} 

Session-Klasse speichert user_id, username und mehr in $_SESSION. Die Verbindung zur Datenbank ist erforderlich, da die Dateien, auf die der Webbenutzer Zugriff hat, in der Datenbank gespeichert sind. Wenn ich irgendwelche dynamischen Daten in dieser Frontend-Datei laden möchte, benutze ich die Funktionen post oder load von jQuery und mache einen Aufruf an eine Backend-Datei. Diese Backend-Datei enthält in den meisten Fällen pg_db_connection, führen Sie einige Datenbankabfragen aus, wenn sie auch benötigt werden - machen Sie mehr Arbeit an den Daten (mit HTML-Tags umhüllen oder formatieren Sie das Array und dann json_encode) und rufen Sie dann HTML oder JSON ab die Frontend-Datei. Dann wird dieser HTML-Code in der Lade- oder Post-Callback-Methode von jquery geschrieben, wo er benötigt wird, oder der JSON wird irgendwie in HTML umgewandelt und wieder irgendwo in den HTML geschrieben.

Ich wundere mich, wenn ich irgendeine Art von bekannten architektonischen Muster verwende. Oder welches architektonische Muster ist dem beschriebenen Ansatz am nächsten?

+0

Das sieht aus wie normale OOP für mich. Ich kann kein bestimmtes architektonisches Muster sehen. Wenn Sie sich fragen, warum Ihre Frage abgelehnt wird, liegt das daran, dass sie für StackOverflow nicht verfügbar ist. Für diese Art von Fragen gibt es [CodeReview] (http://codereview.stackexchange.com/). – apokryfos

+0

@apokryfos Hallo! Diese Frage wäre bei der Code Review off-topic, da sie keine Überprüfung/Verbesserung, sondern eine Eigenschaft des Codes selbst ("Architekturmuster") verlangt. Bitte stellen Sie sicher, dass Sie wissen, was gerade für eine SE-Site aktiv ist, bevor Sie einen Nutzer dorthin verweisen! – syb0rg

Antwort

1

Soweit ich weiß, folgt Ihre Anwendungsarchitektur keinem spezifischen Architekturmuster. Im Allgemeinen verwenden Sie eine Client (Frontend) - Server (Backend) -Architektur und Sie holen Daten aus dem Frontend mit JavaScript/Ajax Anfragen. Sie verwenden nicht die Architektur Ihres Business-Logik-Code angeben ... so gibt es keine Möglichkeit zu sagen, ob Sie ein MVC-Muster usw. verwenden ... überprüfen Sie diesen Link, um mehr zu erfahren: https://softwareengineering.stackexchange.com/questions/158260/is-there-any-design-pattern-except-mvc-for-web

I empfehlen Sie auch diese Zuschreibung zu lesen, um ein besseres Verständnis von Web-Anwendung Design-Entscheidungen zu erhalten: Web Application Design Patterns

aus der Liste in diesem Link, würde ich sagen, dass Sie die folgenden Entwurfsmuster verwenden:

  • Anforderungsverarbeitung: Seite Controller (anscheinend haben Sie einen einzelnen Eintrag Klasse, wo Sie die Authentifizierung und Autorisierung steuern)

  • Präsentation: Presenter Supervising (wenn ich Sie richtig verstanden habe, können Sie tun, um die Hauptlogik in dem Server, aber sie dann einige UI/JSON-Inhalt Ersatz Aufgaben delegieren usw. an das Frontend JavaScript)

  • Seitenlayout (UI): Transformieren/Two-Step-Ansicht (Sie erstellen mit jQuery einige HTML aus JSON nicht wahr?)

  • Persistence: Transactional Data Store (weil Sie (verwenden beginnen), commit(), Rollback())

Einige Kritik: pg_db_connection bedeutet, dass Sie verwenden müssen postgres DB ich denke? ... so dass Sie Ihre Datenbank nicht einfach wechseln können ... und Sie müssen sich mit fehleranfälligen und sicherheitsgefährdenden SQL-Abfragen auf niedriger Ebene beschäftigen ... Das benutzerdefinierte Session-Handling ist auch ziemlich fehleranfällig. Stürze ... zB

header("Location: /html/admin/login.php?url=" . urlencode($_SERVER['REQUEST_URI'])) 

... könnte zu einer Umleitung-Verwundbarkeit führen ... und ich will nicht einmal wissen, was Sie in login.php tun ...

In Bezug auf Ausfahrt; Sie können hier warum Ausfahrt lesen möchten() suboptimal: Best Practice for PHP exit()

Wie dem auch sei, es gibt Gründe, warum Menschen eigentlich nicht ihre eigenen Web-Anwendungsarchitektur von Grund auf neu zu schreiben und eher erhalten inspiriert-by- oder Nutzung ein PHP-Framework:

  • Make Speed-Entwicklung möglich
  • Provide gut organisiert, wiederverwendbar und wartbaren Code
  • Lassen Sie ove wachsen r Zeit als Web-Anwendungen auf Frameworks ausgeführt ist skalierbar
  • Ersatz Sie von den Sorgen über Low-Level-Sicherheit einer Website
  • Folgen Sie die MVC (Model-View-Controller) Muster, das die Trennung von Darstellung und Logik gewährleistet
  • modernen Praktiken Web-Entwicklung fördern, wie objektorientierte Programmiertools

Sehen Sie sich einige der derzeit modernen Frameworks in diesem Blog-Post präsentiert out: http://www.hongkiat.com/blog/best-php-frameworks/ (das ist auch die Quelle für die vor-Erwähnung ed Rahmenverwendung Gründe ...) Vielleicht etwas passt zu Ihrem Anwendungsfall ohne zu langsam/aufgebläht/etc ...

Verwandte Themen