2010-11-22 12 views
1

Von .NET zu PHP gehen, weil ich die Möglichkeiten der Sprache erkunden möchte Ich bin dabei, einen Weg zu finden, eine DAL automatisch zu generieren. In .Net würde ich nur Visual Studio verwenden, um ein Datamodell zu generieren, aber wie kann ich das mit PHP und MySQL machen, damit ich nicht alle Klassen manuell eingeben muss? Meine aktuelle PHP-IDE ist Aptana.DAL-Generator für PHP

Antwort

1

Wenn Sie wirklich in die Idee hinter PHP springen wollen, und nicht nur .net-Stil-Code in PHP schreiben, müssen Sie weg von den Objects-all-over-Methoden von .net.

Wie Sie festgestellt haben, ist die automatische Generierung von Objekten in PHP nicht üblich. Was bedeutet, dass die Lösung des Problems nicht darauf angewiesen sein sollte.

Versuchen Sie, generische Objekte zu erstellen, und nutzen Sie die Vererbung, um das Aufblähen von Objekten zu vermeiden. Darüber hinaus versuchen Sie, sich weniger auf Datenübertragungsobjekte als auf das Erstellen kompletter Objekt-als-Werkzeug-Objekte zu verlassen.

Sie werden feststellen, dass PHP viel mehr Spaß macht, wenn Sie sich aus dem Netz von .net befreien.

Um das in die richtige Perspektive zu bringen, glaube ich nicht, dass ich in den 5 Jahren professionell in PHP gearbeitet habe, bei Großprojekten wie Armee.mil, habe ich jemals das Bedürfnis verspürt, eine vollwertige DAL zu erstellen um den Job zu erledigen.

Das größte Projekt, an dem ich gearbeitet habe, hat nur ein System von Modellklassen, von denen jede eine Liste von Methoden enthält, die die Datenbank nach Rohdaten abfragen und diese Daten dann in die endgültigen Objekte leiten. (in diesem Fall Artikel, die die Artikel auf Armee.mil bilden)

Es gibt einfach keine Notwendigkeit für eine andere Schicht zwischen dem Modell und den Daten in PHP. Es bedeutet fast immer mehr Arbeit für keinen Gewinn.

Es gibt verschiedene Gründe, warum sie in .net sinnvoll sind. Nicht zuletzt, dass sie trivial automatisch generiert werden können und daher fast keine Zeit kostet, sie zu haben.

Das heißt, wenn DAL innerhalb der Grenzen eines Frameworks gekapselt wird, beginnt DAL wieder Sinn zu machen. Wenn Ihr Projekt einfach ist, würde ich ein Framework wie CodeIgniter vorschlagen. CI enthält ein wirklich schönes Datenbankabstraktionssystem. Es verzichtet auf SQL zugunsten von Methoden, die sich in die bestimmte Datenbank verwandeln, die Sie in der Konfigurationsanforderung definiert haben. Dies dient dem gleichen Zweck wie eine DAL. Sie erstellen die Abfrage immer noch im Modell und müssen dennoch die Struktur Ihrer Datenbank kennen. Aber trotz allem, was Sie glauben machen wollen, sind das immer noch Bedenken für .net DALs.

Um jedoch wirklich zu bekommen, was PHP ist, müssen Sie die Insignien eines Frameworks verlieren und frei arbeiten. PHP ist eine Hackersprache. Es bietet Hacking. (wie in der Sitz-der-Hose-Programmierung, nicht knacken, ok, beides ..) Und das ist wirklich, was Sie tun müssen, um zu verstehen, worum es geht.

Ist es ein zweischneidiges Schwert? Total. Aber schnell und locker mit Code zu spielen ist der Ort, an dem PHP seine Stärken ausspielt. Es gibt einen Grund, warum es die Sprache für schnelle Up-Over-Startups ist.

Sorry für die lange und technisch Wegthema Antwort. Ich hoffe, du kannst mir verzeihen. Sie sagten, Sie haben begonnen, PHP zu verwenden, um die Möglichkeiten zu verstehen. Wenn Sie so weitermachen, werden Sie entscheiden, dass es schwach, ungenau, ungeschickt und fehleranfällig ist. und Sie werden all die Größe vermissen, die es in seiner Flexibilität, Erweiterbarkeit, Hackfähigkeit und seinem Geist bietet. Ich möchte nicht, dass du den Sinn der Sprache verpasst.

+0

danke für diese - ich schätze Beiträge wie das wirklich. Der Grund, nach dem ich bei DAL frage, ist, dass ich einen REST-Service in PHP erstelle und ich mit Best Practice gehen wollte, um SQL-Injektionen zu vermeiden und andere Sicherheitsprobleme, die ich als PHP-Noob haben könnte create, offensichtlich beeinflusst von meinem .net-Denken - ich würde mich freuen, wenn du mein Projekt kommentierst, vielleicht sollte ich dafür einen eigenen Thread erstellen. – Jakob

+0

Könnte hilfreich sein. Aber wenn Sie sich Sorgen um Sicherheit machen, versuchen Sie es mit der mysqli-Schnittstelle in PHP und stellen Sie sicher, dass Sie die Parameter binden und dass Sie die Due-Diligence durchführen, um sicherzustellen, dass die Daten korrekt sind. Sie müssen keine mysql-basierten String-Escaper ausführen, da dies zusammen mit der Parameterbindung von mysqli zu doppelt entweichenden Angriffsvektoren führen kann. – DampeS8N

+0

Andere .net zu PHP-Sicherheitsmerkmalen: schwach typisierte Variablen können zu merkwürdigem typenverschiebendem Verhalten führen. Versuche Typen in Methoden/Funktionen zu schreiben und/oder Dinge in Strings zu verwandeln und sie streng zu analysieren (teure Ressourcen, aber die sichersten Methoden um die Integrität zu gewährleisten) - Vergiss auch nicht htmlentities() zu starten alle Daten des Benutzers oder der Datenbank, die Sie im Browser ausgeben möchten. Dies verhindert XSS. – DampeS8N

3

Sie könnten ein ORM wie Doctrine oder Propel verwenden.

Diese Funktionen ermöglichen die automatische Generierung von Klassen aus dem Schema und umgekehrt.

Wenn Sie Ihre eigene Zugriffsschicht schreiben müssen, würde ich empfehlen, PHP Data Objects (PDO) verwenden, da es eine schöne OO-Schnittstelle und DB-Engine-Abstraktion bietet.

2

Normalerweise würde ich keine Antwort schreiben, da Sie schon 2 haben, aber ich möchte Ihnen ein paar Einblicke geben, die die Tatsache, dass ich ein .NET und PHP-Entwickler bin und versuchen, Vorteil zu nutzen beide:

  • Wenn Sie für die Codegenerierung stark wie Visual Studio suchen, dann suchen Sie nicht mehr, weil in PHP habe ich ein noch nicht gefunden und ich habe seit Jahren gesucht. Visual Studio ist nur "riesig"

  • Zu meinem Verständnis gibt es nicht so etwas wie .NET-Code-Stil. Ich glaube, dass die meisten PHP-Frameworks/-Anwendungen viel im Sinne von "Einfachheit" opfern und ich denke, dass es einfach nicht richtig ist. Code sollten Sie

    buid in jedem Rahmen/Anwendung erweiterbar, wartbar und skalierbar sein
  • Propel und Lehre sind hervorragend für die Datenzuordnung (ORM), ähnlich wie NHibernate oder Entity Framework in PHP, aber dran denken, dass eine Daten benötigen Access Layer und Business Access Layer für eine vollständig entwickelte Anwendung, die skalierbar ist.

  • Denken Sie daran, dass PHP OO ähnlich wie .NET unterstützt, aber in einigen Dingen unterscheidet, aber gut entwickelnde Designs sind für jede Sprache gedacht.

Ich denke, meine Antwort ein wenig weg von der ursprünglichen Frage gegangen ist, aber ich mochte Sie eine größere Antwort geben, da, wie Sie gesagt haben, man wollte:

... erkunden die möglichkeiten der sprache ...

Und Sie brauchen viele Meinungen, um Ihre eigenen zu bilden. Viel Glück in dir und hoffe, dass meine Antwort dich nicht der Langeweile beraubt hat! :)

PS: Sollten Sie etwas mehr Zeug auf BLL und DAL mit PHP, überprüfen Sie this article Ich schrieb in meinem Blog.

+0

Ich schätze Ihre Eingabe sehr - netter Artikel, ich hoffe, Sie werden mehr Blogposts schreiben. – Jakob

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, es zu lesen. Ich bin jetzt irgendwie mit einem Buch über Web-Entwicklung auf PHP, aber ich habe ein paar Entwürfe bereits. Freundliche Grüße –