php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Scripts > BRAINSTORMING PHP/SQL/HTML/JS/CSS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


BRAINSTORMING PHP/SQL/HTML/JS/CSS Ihr habt eine Idee, aber keinen genauen Ansatz? Diskutiert mit anderen Usern des Forums über eure Gedankengänge um evtl. hilfreiche Ideen zu bekommen!
Normale Fragen bitte weiterhin in die entsprechenden Foren!

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 4,00 durchschnittlich.
  #16 (permalink)  
Alt 19-11-2009, 18:17
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Schwer machen ist ja eh egal, oben ist eine Klasse verlinkt. Diese einzubinden ist ein Kinderspiel. Weiter wird der Code generiert, d.h. Singular oder Plural macht performancetechnisch keinerlei Unterschied.
Mit Zitat antworten
  #17 (permalink)  
Alt 19-11-2009, 18:20
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von PHP-Desaster Beitrag anzeigen
Schwer machen ist ja eh egal, oben ist eine Klasse verlinkt. Diese einzubinden ist ein Kinderspiel. Weiter wird der Code generiert, d.h. Singular oder Plural macht performancetechnisch keinerlei Unterschied.
Ich finds einfach nur sinnlos. Man benennt die Tabellen in der Mehrzahl, nur damit man sie danach wieder mit Regular Expressions rausfiltern kann?? So kann man natürlich auch Leistung und Code-Zeilen verschwenden, auch wenns minimal ist.

Aber man sollte auch bedenken, dass es eine zusätzliche Fehlerquelle ist. Und für was? Damit die Tabellennamen "hübscher" sind?

Ich seh da einfach keinen praktischen Vorteil, sondern nur Nachteile.
Mit Zitat antworten
  #18 (permalink)  
Alt 19-11-2009, 18:23
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ich würde mich da gar nicht vom Sprachgebrauch leiten lassen, weder vom deutschen noch vom englischen. Dass das Mapping von Singular auf Plural und umgekehrt nicht trivial ist (in keiner mir bekannten Sprache) ist klar. Es gibt keine 100% korrekte Lösung. Kann es nicht geben, denn Sprachen verändern sich. Es kommen neue Wörter dazu und die können Sonderfälle sein wie das o.g. child/children. Es wäre also notwendig, die Tabelle der Sonderfälle regelmäßig zu aktualisieren, um as close as possible an der perfekten Lösung zu sein. Aber wie soll die Pflege dieser Tabelle denn aussehen? Da afaik solche Listen nicht irgendwo fertig und aktuell zu bekommen sind, muss man selbst die Entwicklung der Sprache beobachten. Und wie entscheidet man, ob ein neues Wort bereits zur Sprache und damit auch in die Liste gehört? Wie stellt man sicher, dass die Liste dem Sprachschatz aller Anwender des Codes voraus ist? Geht gar nicht. Es kann keine 100% korrekte Lösung geben und für as close as possible ist Expertenwissen und regelmäßiger Aufwand nötig. Das wäre es mir nicht wert und ich würde es kategorisch ablehnen, weil es das Projekt unnötig komplexer macht und Abhängigkeiten erzeugt, die die Sache nicht wert sind.

Das Argument "Eine Tabelle enthält mehrere Datensätze, stellt also definitiv einen Plural dar" basiert auf der Ansicht, dass der Tabellenname bezeichnen muss, wie viele Datensätze die Tabelle enthalten kann. Es wurde bereits erwähnt, dass jede Tabelle immer mehrere Datensätze enthalten kann. Die Anzahl möglicher Datensätze muss also gar nicht im Tabellennamen ausgedrückt werden - es gibt nur eine Möglichkeit. Wenn der Name etwas ausdrücken soll, dann die Kardinalität bei Verknüpfungstabellen. Wenn! Er muss es nicht. Das kann man auch wo anders notieren, so dass ein Generator damit arbeiten kann; beispielsweise als Kommentar (INFORMATION_SCHEMA.TABLES.TABLE_COMMENT).

Statt viel Arbeit, mehr Komplexität und Abhängigkeiten für eine niemals perfekte Lösung, plädiere ich eindeutig für eine ganz einfache Lösung, die nur dahingehend nicht perfekt ist, dass man eine bestimmte Ansicht über die Aussagekraft von Tabellennamen haben muss, um es als korrekt aufzufassen.
Mit Zitat antworten
  #19 (permalink)  
Alt 19-11-2009, 19:46
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Prinzipiell stimme ich dem pragmatischen Ansatz zu, alles im Singular zu halten. Praktisch wirft das, jedenfalls bei mir, ein paar Probleme auf. Die Item-Controller sollten weiterhin im Plural verfasst sein. Warum? Es sieht schöner aus! Bringt das was? Genau so viel wie eine sprechende Adresse eben bringt.

Trotzdem bin ich mehr und mehr vom "alles Einzahl" überzeugt.
Mit Zitat antworten
  #20 (permalink)  
Alt 19-11-2009, 19:51
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von unset Beitrag anzeigen
Prinzipiell stimme ich dem pragmatischen Ansatz zu, alles im Singular zu halten. Praktisch wirft das, jedenfalls bei mir, ein paar Probleme auf. Die Item-Controller sollten weiterhin im Plural verfasst sein. Warum? Es sieht schöner aus! Bringt das was? Genau so viel wie eine sprechende Adresse eben bringt.

Trotzdem bin ich mehr und mehr vom "alles Einzahl" überzeugt.
Die Adresse kannst du ja als Route festlegen. Wie bereits gesagt, es reicht wenn es für den Endbenutzer schön ausschaut. Warum willst du deine Programmstruktur an die Regeln der Ausgabe und Adressierung richten? Die haben damit ja nicht wirklich was zu tun.

Was ist wenn irgendwann die Anforderung kommt, dass die Adressierung nicht in der Mehrzahl sondern in der Einzahl erfolgen soll? Oder wenn die Items plötzlich nicht mehr Items sondern Articles heißen sollen? Schreibst du dann deine Controller, Models, Datenbanktabellen und alles was darauf verweist um? Und was ist bei Mischfällen?

Geändert von h3ll (19-11-2009 um 19:57 Uhr)
Mit Zitat antworten
  #21 (permalink)  
Alt 19-11-2009, 20:03
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Die Adresse kannst du ja als Route festlegen. Wie bereits gesagt, es reicht wenn es für den Endbenutzer schön ausschaut. Warum willst du deine Programmstruktur an die Regeln der Ausgabe und Adressierung richten? Die haben damit ja nicht wirklich was zu tun.
Das sich das alles dynamisch zusammenbaut eben schon. Es gibt physisch keinen "Items"-Controller, lediglich eine Tabelle namens "items" (das ist jetzt etwas vereinfacht). D.h. ich muss zumindest beim erstellen oder auswerten der Route in irgend eine Richtung Plurali- oder Singularisieren - denn die sind eben auch dynamisch.

Zitat:
Zitat von h3ll Beitrag anzeigen
Was ist wenn irgendwann die Anforderung kommt, dass die Adressierung nicht in der Mehrzahl sondern in der Einzahl erfolgen soll? Oder wenn die Items plötzlich nicht mehr Items sondern Articles heißen soll? Schreibst du dann deine Controller und alles was darauf verweist um? Und was ist bei Mischfällen?
WENN diese Anforderung kommt, kann ich es immer noch über von Hand geschriebene Routen lösen ... das wäre aber in der Tat ein Sonderfall, da sich das ganze System ansonsten an den Convetion over Configuration Grundsatz hält.

Wenn ich eine Tabelle umbenenne muss ich nichts anpassen (solange sie derzeit weiterhin in der Mehrzahl vorliegt und abgesehen von den auf diese Tabelle zeigenden FKs), da sich alle Adressen/Routen/Controller/Module halt dynamisch generieren. Zur verdeutlichung: Ich lege eine Tabelle Namens "shop_products" an, woraufhin automatisch ein Modul Namens "Shop" existiert, ein Controller Namens "Products" ein Modell namens "Products" ... dieser Controller hat - wie eingangs schon erwähnt - eine Reihe typischer Actions wie edit, delete, add, move, view, list, etc. All das rein virtuell über eine Methode die ich einfach mal "showOffAs" getauft habe. D.h. der so erzeugte Controller ist in wirklichkeit eine Instanz von Controller_Action_Generic, wird er gefragt, von welcher Klasse er eine Istanz ist, behauptet er allerdings Module_Shop_Controller_Products (nur falls gefragt wird: gefragt wird sowas im ganzen System über eine in einem allgemein gültigen Interface definierte Methode).
Mit Zitat antworten
  #22 (permalink)  
Alt 19-11-2009, 20:04
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Oder wenn der Kunde einen deutschsprachigen Shop betreiben will, und lieber Produkt statt Product im URL sehen möchte ...
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #23 (permalink)  
Alt 19-11-2009, 20:06
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Oder wenn der Kunde einen deutschsprachigen Shop betreiben will, und lieber Produkt statt Product im URL sehen möchte ...
Das hab ich hierüber abgefackelt: Zend Framework: Documentation ... und wo ich mir das grade nochmal anschaue ... das könnte ich am Ende auch für das Plural/Singular-Problem nehmen.
Mit Zitat antworten
  #24 (permalink)  
Alt 19-11-2009, 20:18
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von unset Beitrag anzeigen
Das sich das alles dynamisch zusammenbaut eben schon. Es gibt physisch keinen "Items"-Controller, lediglich eine Tabelle namens "items" (das ist jetzt etwas vereinfacht). D.h. ich muss zumindest beim erstellen oder auswerten der Route in irgend eine Richtung Plurali- oder Singularisieren - denn die sind eben auch dynamisch.


WENN diese Anforderung kommt, kann ich es immer noch über von Hand geschriebene Routen lösen ... das wäre aber in der Tat ein Sonderfall, da sich das ganze System ansonsten an den Convetion over Configuration Grundsatz hält.

Wenn ich eine Tabelle umbenenne muss ich nichts anpassen (solange sie derzeit weiterhin in der Mehrzahl vorliegt und abgesehen von den auf diese Tabelle zeigenden FKs), da sich alle Adressen/Routen/Controller/Module halt dynamisch generieren. Zur verdeutlichung: Ich lege eine Tabelle Namens "shop_products" an, woraufhin automatisch ein Modul Namens "Shop" existiert, ein Controller Namens "Products" ein Modell namens "Products" ... dieser Controller hat - wie eingangs schon erwähnt - eine Reihe typischer Actions wie edit, delete, add, move, view, list, etc. All das rein virtuell über eine Methode die ich einfach mal "showOffAs" getauft habe. D.h. der so erzeugte Controller ist in wirklichkeit eine Instanz von Controller_Action_Generic, wird er gefragt, von welcher Klasse er eine Istanz ist, behauptet er allerdings Module_Shop_Controller_Products (nur falls gefragt wird: gefragt wird sowas im ganzen System über eine in einem allgemein gültigen Interface definierte Methode).
Also bis jetzt hab ich es überall nur so gesehen, dass die URL in der Einzahl angegeben wird.

http://example.org/shop/product/Gummistiefel
http://example.org/person/edit/2
http://example.org/myprofile/show
http://www.php-resource.de/forum/php-developer-forum/

Warum sollte man diese Begriffe in der Mehrzahl schreiben? Sieht doch komisch aus:

http://example.org/shops/products/Gummistiefel
http://example.org/persons/edit/2
http://example.org/myprofiles/show
http://www.php-resource.de/foren/php-developer-forum/

Und wenn mal wirklich die Ausnahmeanforderung kommt, dass es in der Mehrzahl geschrieben wird, kann man immer noch eine Route festlegen (oder es mit einer anderen Methode lösen).

Geändert von h3ll (19-11-2009 um 20:22 Uhr)
Mit Zitat antworten
  #25 (permalink)  
Alt 19-11-2009, 20:37
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

So aus dem Stehgreif hab ich schon ein paar Realwelt-Beispiele, wo das anders ist:

http://es.technorati.com/people/unset
http://twitter.com/unset/favorites
http://games.shop.ebay.de/

Aber wie ich schon sagte, ich stimme dem Singular-Ansatz ja zu
Mit Zitat antworten
  #26 (permalink)  
Alt 20-11-2009, 08:15
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von unset Beitrag anzeigen
All das rein virtuell über eine Methode die ich einfach mal "showOffAs" getauft habe. D.h. der so erzeugte Controller ist in wirklichkeit eine Instanz von Controller_Action_Generic, wird er gefragt, von welcher Klasse er eine Istanz ist, behauptet er allerdings Module_Shop_Controller_Products (nur falls gefragt wird: gefragt wird sowas im ganzen System über eine in einem allgemein gültigen Interface definierte Methode).
Das hat jetzt zwar nichts mit dem Problem Singular vs. Plural zu tun, aber mich interessiert sehr wie dein Code dazu aussieht. Darf man das mal sehen?
Vor allem beim letzten Satz sprangen mir sofort Type Hinting und Debugging in den Kopf. Type Hinting brauchst du vielleicht für diese Klassen gar nicht bzw. es gibst nur die allen automatisch erzeugten Klassen gemeinsame Basisklasse an. Aber beim Debugging könnte es doch stören, wenn immer Controller_Action_Generic gemeldet wird. Kommt halt darauf an, wieviel Code die virtuellen Klassen gemeinsam haben. Wenn sie alle gleich sind, machts keinen Unterschied. Sind sie das?
Nicht zuletzt interessiert mich auch, wie du die Klassen erzeugst. Vermutlich erstellst du nur Instanzen von Controller_Action_Generic und setzt per Ctor den "virtuellen Typ", den die Methode showOffAs zurückgibt. Die virtuellen Klassen werden also ohne weitere Kosten zur Laufzeit erzeugt. Die zu erzeugenden Typen weißt du aus der URL. Aber du musst doch prüfen, ob es auch die zugehörige Tabelle gibt. Das kostet was.

Ich finde die Bezeichnung virtuelle Klasse übrigens unpassend, denn wenn es so ist wie ich glaube, gibt es nur die Klasse Controller_Action_Generic.

Vielleicht ahnst du es schon: Ich will darauf hinaus, dass es möglicherweise besser wäre, statt virtuellen Klassen echt Ableitungen von Controller_Action_Generic zu erzeugen und als Datei zu speichern.


Falls es irgendwen stört, dass ich hier so vom Thema abweiche, sagt bescheid. Dann trenne ich ab.
Mit Zitat antworten
  #27 (permalink)  
Alt 20-11-2009, 10:05
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zeigen kann ich den Code leider nicht. Noch jedenfalls ... ich arbeite derzeit privat an einer offenen Iteration des Konzeptes. Ich hoffe, ihr habt dafür Verständnis, auch wenn ich konkret zu diesem Closed Source Code eine Frage habe.

Das überprüfen der Tabellen kostet, ja. Aber auch nur genau ein mal beim Deploy auf den Live-Server, da wird die Datenbankstruktur einmal ausgelesen, gepuffert und bis zum nächsten Deploy verwendet. Ohne Deploy keine Veränderung an der Datenstruktur.

"Virtuelle Klasse" ist ind der Tat etwas doof gewählt, eine Ableitung ist es allerdings auch nicht wirklich. Ich wweiß leider nicht, wie man es besser ausdrücken könnte.

Type Hinting nutze ich schon exzessiv, allerdings nur auf die Basis-Klassen (statt konkretem Modell halt auf das generische - es sei denn, es existieren konkrete).

Ansonsten hast du das alels schon richtig impliziert.

Beim Debugging hatte ich derzeit keine Probleme. Da ich im Fehlerfall ja auch die kompletten Traces habe, sehe ich ja auch, als was sich die Klassen ausgeben. Seit dem ich vor kurzem allerdings ebenso dynamische Tests für alle möglichen Konstellationen der generischen Geschichten geschrieben habe, komme ich an der Stelle gar nicht mehr in irgendwelche Bedrängnis. Lediglich konkrete Implementationen mit veränderten oder ergänzten Methoden müssen von Hand geschrieben werden.

Ich würde die Diskussion dahingehend allerdings gerne auf den Zeitpunkt verschieben, an dem ich eine öffentliche Version anbieten kann - denn ich hab selbst bei meinen Kollegen Probleme, an einem Stück zu erklären, wie das ganze Funktioniert - und die können sich den Code angucken
Mit Zitat antworten
  #28 (permalink)  
Alt 20-11-2009, 10:25
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Kein Problem, ich kann warten.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Learn English... jahlives Out of Order 3 28-09-2007 18:03
English for beginners TroX Off-Topic Diskussionen 9 15-01-2007 16:41
Kredikarten (english required) mrhappiness Out of Order 8 05-01-2005 14:20
Board speaks English? TobiaZ Fragen/Vorschläge zum Forum 2 30-10-2003 14:07
English Translation ice_cube Webmaster 3 10-04-2002 23:37

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:12 Uhr.