Frage

Ich bin relativ neu in PHP, aber erfahrenen Java-Programmierern in komplexen Unternehmensumgebungen mit SOA-Architektur und Multitier-Anwendungen. Dort würden wir normalerweise Geschäftsanwendungen mit Geschäftslogik auf der mittleren Ebene implementieren.

Ich programmiere ein alternatives Währungssystem, die von Einzelpersonen und Gemeinschaften leicht einsetzbar und anpassbar sein sollte; es wird Open-Source sein. Deshalb PHP / MySQL die beste Wahl für mich scheint.

Die Nutzer haben Konten, und sie bekommen ein Gleichgewicht. Auch lieferte das System berechnet die Preise je nach Gesamt Dienstleistungen und insgesamt zur Verfügung stehenden Vermögenswerte.

Das bedeutet, dass bei einem Kauf eine Reihe von Berechnungen geschehen; das Gleichgewicht und die Summen erhalten aktualisiert; diese sind abgeleitete Figuren, etwas normalerweise nicht in eine Datenbank stellen.

Trotzdem habe ich Zuflucht zu Triggern und Stored Procedures in die db setzen, dass dies in dem PHP-Code keines dieses Updates vorgenommen werden.

Was denken die Leute? Ist das ein guter Ansatz? Meine Erfahrung sagt mir, dass dies nicht die beste Lösung, und fordert mich auf eine mittlere Ebene zu implementieren. Allerdings würde ich nicht einmal wissen, wie das zu tun. Auf der anderen Seite, was ich bisher mit Speicher Procs haben scheint mir das am besten geeignete.

Ich hoffe, dass ich meine Frage klar. Alle Kommentare zu schätzen. Es ist vielleicht nicht eine „perfekte“ Lösung sein.

War es hilfreich?

Lösung

Wie ist die Tendenz in diesen Tagen, von der DB im Allgemeinen eine gute Sache ist, wegzukommen. Sie erhalten eine einfachere Steuerung Version und Sie erhalten in nur einer Sprache zu arbeiten. Mehr als das, ich fühle, dass gespeicherte Prozeduren ein harter Weg zu gehen. Auf der anderen Seite, wenn Sie wie das Zeug und Sie mit SPs in MySql wohl fühlen, sind sie nicht schlecht, aber mein Gefühl ist schon immer, dass sie schwieriger zu debuggen und schwieriger zu handhaben.

Auf dem Auslöser Problem, ich bin nicht sicher, ob das für Ihre Anwendung erforderlich ist. Da die Ereignisse, die die Berechnungen auslösen vom Benutzer aufgerufen werden, können diese Dinge in PHP passieren, auch wenn der Benutzer auf eine „warten“ Seite oder eine andere Seite in der Zwischenzeit umgeleitet wird. Offensichtlich kann wahre Auslöser nur auf der DB-Ebene getan werden, aber Sie könnten einen Daemon-Thread verwenden, die ein PHP-Skript ausgeführt wird alle X Sekunden ... Vermeiden Sie dies mit allen Mitteln und versuchen, das Ereignis-Trigger von der Benutzerseite zu bekommen.

All dies sagte, wollte ich meine favorisierte Lösung für die Datenzugriffsschicht auf PHP stopfen: Lehre . Es ist nicht perfekt, aber PHP zu sein, was es ist, ist es gut genug. Ist das meiste, was Sie wollen, und hält Sie mit Objekten arbeiten anstelle von Datenbankprozeduren und so weiter.

In Bezug auf Ihre Titel, mehrere Ebenen sind, in PHP, völlig machbar, aber Sie haben sie zu tun und sie zu respektieren. PHP-Code kann andere PHP-Code aufrufen, und es ist jetzt (5.2+) schön OO und das alles. Stellen Sie sicher, die Tatsache zu ignorieren, dass viele PHP-Code Sie werden sehen, um insgesamt Mist ist und auch dann nicht verwenden Methoden, geschweige denn Ebene und anständige OO-Modellierung. Es ist alles möglich, wenn Sie es tun wollen, einschließlich Ihrer eigenen zu tun (oder eine vorhandene verwenden) MVC-Lösung.

Andere Tipps

Ein Problem mit vielen Features auf die DB-Ebene schieben, statt einer Datenabstraktionsschicht ist, dass Sie in den Feature-Set des DBMS gesperrt bekommen. Open-Source-Software ist oft so geschrieben, dass es mit verschiedenen DBs verwendet werden kann (natürlich nicht immer). Es ist möglich, dass auf der Straße wollen Sie es einfach in den Hafen Postgres oder einigen anderen DBMS machen. jetzt viele MySQL spezifische Funktionen verwendet, wird das schwieriger.

Es gibt absolut nichts falsch mit der Verwendung von Triggern und Stored Procedures und anderen Funktionen, die von Ihrem DB-Server zur Verfügung gestellt werden. Es funktioniert und funktioniert gut, können Sie das volle Potenzial des DB verwenden, anstatt einfach verbannt es ein sehr einfaches Datenspeicher zu sein.

Aber ich bin sicher, dass für jeden Entwickler hier die mit Ihnen stimmt (und mich) gibt es mindestens so viele, die genau das Gegenteil denken und haben gute Erfahrungen gemacht mit, das zu tun.

Danke Jungs.

Ich war mit db-Trigger, weil ich dachte, dass es einfacher sein könnte, um Steuertransaktionsintegrität so. Wie Sie vielleicht erkennen, ich ist ein Entwickler, der auch Griff des db Wissens zu bekommen versucht.

Nun, ich sehe es die Lösung ist, die PHP-Code auf mehreren Ebenen, nicht nur logisch, sondern auch durch den Einsatz auf verschiedenen Servern physisch zu verbreiten.

Doch in diesem Stadium der Entwicklung, ich glaube, ich meine Trigger / sp Lösung hafte, so dass sie nicht falsch sein fühlt. Verteilen auf mehrere Schichten würde mich erfordern meine App konsequent neu zu gestalten.

Auch Open-Source denkt, wenn jemand das alternative Geldsystem mag, könnte es einfacher für Menschen, für ihre Anforderungen nur Layout ändern, während ich keine Sorgen zu machen brauchen würde, dass die Berechnungen falsch, wenn die Menschen PHP-Code berühren.

Auf der anderen Seite, natürlich, ich stimme, dass db Zeug zu debuggen sehr hart bekommen könnte.

Die DB Init-Skripte sind in der Quellcodeverwaltung, wie die PHP-Dateien:)

Danke nochmal

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top