php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.06.2008, 13:33  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard OOP Umsetzung

Hi Leute,

ich habe jetzt mal nen Fall wo mir OOP sicher sehr nützlich sein kann, nur es hapert etwas an der Umsetzung, nicht von der Syntax her sondern von der Logik.

Folgende situation:

Code:
- Klasse Buchungen
- Klasse Arbeitszeiten (bzw. Abwesenheitszeiten)
- Klasse Spesen
Das ganze ist im Prinzip eine n:1:n Beziehung, in der o.g. Reihenfolge. Es geht im Prinzip um die Datenbank, kommt also jemand daher und bucht eine neue Tätigkeit, so muss der Mutterdatensatz erstellt, bzw geupdatet werden.

Es muss also untereinander kommuniziert werden und das unter allen 3en. Wie setzte ich das am schlausten um? Oder denke ich in eine falsche Richtung?

Gruß
Cy
cycap ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.06.2008, 22:37  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo cycap,

sind die von dir Beschriebenen Klassen echte Domain-Objekte? Worauf ich hinaus will ist einfach die Abgrenzung der Objekte. Oft kann / sollte man verschiedene gemeinsam genutzte Attribute auch in eigene (weitere) Objekte auslagern.

Was die Umsetzung an sich angeht, muss die Datenschicht die in der Anwendung vorhandenen Domain-Objekten speichern / bearbeiten / löschen können. Weiterhin müssen die Beziehungen verarbeitet werdenb können. Dabei müssen Kompositionen entsprechend so aufgelöst werden können, dass die Datenkonsistenz sichergestellt ist. Das Ganze kann man abstrakt und generisch implementieren, oft reicht aber auch eine konkrete Umsetzung.

Beschreib mir mal bitte deine Anforderungen genauer (kleines UML-Klassendiagramm), dann mache ich mir mal ein wenig mehr Gedanken.

Da der Thread meiner Ansicht nach kein Anfänger-Thread ist, habe ich das mal nach Profi verschoben.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 10.06.2008, 06:32  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von cycap Beitrag anzeigen
Das ganze ist im Prinzip eine n:1:n Beziehung
Es gibt nur eine Arbeitszeit? Was ist mit Pausen? Kategorien? Um welche Art von Buchungen geht es?

Zitat:
Zitat von cycap Beitrag anzeigen
kommt also jemand daher und bucht eine neue Tätigkeit, so muss der Mutterdatensatz erstellt, bzw geupdatet werden
Welcher, wieso?

Zitat:
Zitat von cycap Beitrag anzeigen
Es muss also untereinander kommuniziert werden und das unter allen 3en.
Eine Burger-King Krone und ne kleine Pommes fuer cycap!

Beschreib doch mal ein bisschen genauer ..
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 10.06.2008, 08:55  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Eine Burger-King Krone und ne kleine Pommes fuer cycap!
Das stand ja auch vorher unter Einsteiger und wer liest da schon gerne Romane? Und ich konnt ja nicht wissen das sich das zu einer größeren Diskussion entwickelt, aber umso besser wenn sich jetzt die Profis damit beschäftigen

Bisher habe ich versucht das ganze möglichst einfach darzustellen, aber das funktioniert wohl nicht, also jetzt das ganze nochmal detailliert.

Das Datenbanklayout existiert bereits (lässt sich auch ändern) und deshalb kann ich euch daran wohl gut zeigen wie es aussehen soll. Habs anfangs mit ner Berechnung versucht die in einem bestimmtem Zeitintervall durchläuft, ohne OOP.

Ich habe jetzt aber folgende Gründe das ganze zu ändern und OOP zu nutzen:
- ich will lieber immer aktuelle Daten haben statt auf die Berechnung warten zu müssen
- die Berechnung bisher war unübersichtlich und fehleranfällig
- die Berechnung im Zeitintervall kostet irgendwann ne Menge Performance

Ich habe vor einiger Zeit mal eine Zeichnung angefertigt wie die Spesenberchenung funktioniert, siehe hier. Man beachte hier auch die wichtige 0-Uhr grenze.

Die Tabellen workblocks (arbeitszeiten) und awayblocks (spesen) sind eigentlich nur Zusammenfassungen, die ich erstelle um den Export und die Berechnungen zu erleichtern. Die eigentlichen Daten sind also die Buchungen.

Und nun zu den Tabellen (vereinfacht) mit Beispielen:

Buchungen:
Code:
id| type  | id_user | time               | id_taetigkeit | id_kostenstelle | id_source
--------------------------------------------------------------------------------------
1 | work  | 1       |2008-01-01 08:00:00 |     12        |       1234      | 1
2 | pause | 1       |2008-01-01 12:00:00 |    NULL       |       NULL      | 1 
3 | work  | 1       |2008-01-01 13:00:00 |     12        |       1234      | 1 
4 | end   | 1       |2008-01-01 17:00:00 |    NULL       |       NULL      | 1 
5 | work  | 1       |2008-01-02 08:00:00 |     12        |       4430      | 1 
6 | work  | 1       |2008-01-02 09:00:00 |     10        |       1234      | 1 
7 | work  | 1       |2008-01-02 12:00:00 |     12        |       1234      | 1 
8 | end   | 1       |2008-01-02 16:00:00 |    NULL       |       NULL      | 1
Hierbei legt die id_source fest ob der daraus erstellte Block spesenberechtigt ist. Ob Arbeitsende = Übernachtung hab ich bisher daran fest gemacht ob bei einer 'end' Buchung eine gewisse Tätigkeit angegeben ist, würd sich aber auch genau so über einen neuen Type machen lassen. Aus Platzgründen hab ich jetzt mal id_workblock weg gelassen.

Workblocks:
Code:
id| id_user | time_start          | time_end            | sum_pause | is_spesen
1 |  1      | 2008-01-01 08:00:00 | 2008-01-01 17:00:00 | 60        | 1
2 |  1      | 2008-01-02 08:00:00 | 2008-01-02 16:00:00 | 0         | 1
Da hier jetzt keine Übernachtung, keine 0-Uhr Grenze und beide Datensäte Spesenberechtigt sind sieht die Spesentabelle praktisch genau so aus:

Awayblocks:
Code:
id| id_user | time_start          | time_end            | id_land
1 |  1      | 2008-01-01 08:00:00 | 2008-01-01 17:00:00 | 1
2 |  1      | 2008-01-02 08:00:00 | 2008-01-02 16:00:00 | 2
Das land wird hier nachträglich von den Mitarbeitern eingepflegt.


Soo und wenn nun eine Buchung hinzukommt oder sich ändert, dann sollen auch die beiden Elterndatensätze geändert bzw. angelegt werden und genau das ist die Problemstelle. Ich hoffe Ihr versteht mein Problem jetzt etwas besser.
cycap ist offline   Mit Zitat antworten
Alt 10.06.2008, 09:28  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Du solltest zunaechst vermeiden Informationen doppelt abzulegen; das wuerde dann zugleich dein "Elternproblem" loesen.

Kannst du die "Buchungen" nicht aus der Tabelle entfernen, wenn du sie in die *blocks uebertragen hast? Ich wuerde Buchungen jetzt eher als Zustand ansehen, den du auch ueberwachen solltest, in dem du auf Konsistenz pruefst (darf END auf END folgen?). Wozu die Pause festhalten, sie ist implizit die Restzeit und erzeugt dir nur moegliche Fehler.

Ich denke ich wuerde deine Tabelle "Buchungen" also eher als Zustandstabelle verwenden, wobei mir die Software je nach zuletzt hinzugefuegtem Token auch nur eine bestimmte Auswahl an nachfolgenden Token erlaubt (wie gesagt, END auf END macht keinen Sinn).
Wenn du eine Transaktion abgeschlossen hast (START, PAUSE*, END) wird das ganze uebertragen und je nach dem ob du das moechtest, automatisch pro Tag aufgeteilt. Du kannst nun die Zeit aendern, solange es keine Ueberschneidung mit bisherigen Eintraegen gibt (BETWEEN), das sollte ohne grossen Aufwand moeglich sein.

Warte aber besser ab, vielleicht gibts da erfahrenere Antworten.

PS: Versuch dich mal fuer eine Sprache zu entscheiden, time, taetigkeit, end, .. Im Optimalfall heissen deine PHP-Variablen ja auch wie die MySQL-Spalten und dann hast du dir das Denglisch auch gleich noch ins PHP importiert. Nix schoen
__________________
"Nuschel ich?" - "Was?"

Geändert von Chriz (10.06.2008 um 09:33 Uhr).
Chriz ist offline   Mit Zitat antworten
Alt 10.06.2008, 09:33  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Die Buchungen brauche ich ja auch wenn ich zum Beispiel einen Report über die Arbeit zu einer gewissen Kostenstelle oder Tätigkeit haben will, ich kann ja schlecht für jede Tätigekit bzw. KST eine eigene Spalte in der Workblock Tabelle erstellen.
cycap ist offline   Mit Zitat antworten
Alt 10.06.2008, 09:46  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wenn ich eine Arbeitszeit eintrage, dann ja nur unter einer Kostenstelle, andernfalls splitte ich eben (manuell) auf, vormittags Photoshoplayouts schnibbeln, nachmittags CSS-Geraffel. Das Programm weiss ja nicht wieviel ich fuer was gebraucht habe.

Somit kannst du einem workblock doch einfach eine Kostenstelle(n_id) zuordnen, oder nicht?!

id | start | end | user_id | task_id | account_id | ..

Jetzt hast du wann (start-end) wer (user_id) woran (task_id) wie (account_id) gearbeitet hat. Mehr brauchst du doch nicht fuer die Berechnung .

Vielleicht schaust du dir aber auch mal DotProject an, ist ein Management Tool zur Projektverwaltung, mit Kunden, Mitarbeitern, Projekten, Tasks, ..
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 10.06.2008, 09:57  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Zitat von Chriz Beitrag anzeigen
Wenn ich eine Arbeitszeit eintrage, dann ja nur unter einer Kostenstelle, andernfalls splitte ich eben (manuell) auf, vormittags Photoshoplayouts schnibbeln, nachmittags CSS-Geraffel. Das Programm weiss ja nicht wieviel ich fuer was gebraucht habe.
Oh hab vergessen zu sagen: Die Buchungen werden ich echtzeit gemacht. Also ich trage nicht am Ende des Tages ein was ich wann gemacht habe, sondern ich "stempel" und gebe dabei Kostenstelle und Tätigkeit an. Das können bei manchen Mitarbeiten schon so 15 Buchungen am Tag werden. Falls sich verstempelt wurde oder etwas vergessen wurde, so lässt sich das nachträglich (mit Genehmigung) machen.

Wenn ich dich richtig verstanden habe meinst du ich sollte die workblocks weglassen? Die endzeit einer Buchung (=startzeit der nächsten Buchung) speichere ich sowieso schon ab (habs oben nur weg gelassen).

Nur bei deinem Vorschlag sehe ich das Problem wie ich das mit dem Arbeitsende machen soll, denn das ist ja ausschlaggebend für die Spesenberechnung.
cycap ist offline   Mit Zitat antworten
Alt 10.06.2008, 10:32  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Wenn ich mir die Posts so ansehe, machst du genau den Fehler, den ich durch meine Aussage

Zitat:
Beschreib mir mal bitte deine Anforderungen genauer (kleines UML-Klassendiagramm)
vermeiden wollte: kein sauberes Datenmodell. Du definierst wild Tabellen, die mit der eigentlichen Domain-Datenstruktur wenig zu tun haben und argumentierst damit. Mach dir Bitte Gedanken, welche Objekte deine Anwendung haben soll, dann können wir weiter reden.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 10.06.2008, 10:38  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Mach dir Bitte Gedanken, welche Objekte deine Anwendung haben soll, dann können wir weiter reden.
Das ist ja genau das Problem. Ich hab ein Konzept wie die Daten später aussehen sollen und was wann passieren soll weiss ich auch, nur wie ich das am schlausten umsetze eben nicht und das ist die Frage die ich in die Runde werfe. Gerne lass ich mich natürlich auch von dem ursprünglichen Konzept abbringen wenn ein anderes einfacher oder sinnvoller ist.
cycap ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kleine "redaktionelle" Umsetzung chrissi0179 PHP Tipps 2008 4 29.04.2008 16:49
Speed anzeige bzw Umsetzung VincentVanWeb PHP Tipps 2008 11 11.03.2008 20:10
Probleme bei der Umsetzung Kein Genie PHP Tipps 2007 3 02.03.2007 15:43
brauche eure hilfe für die umsetzung eines scriptes... GrungeRocker PHP Tipps 2006 12 31.08.2006 11:31
Bin zu blöd zur HTML Umsetzung HTML, Usability und Barrierefreiheit 10 06.03.2006 14:35
was ist das (shorthand if) PHP Tipps 2006 10 20.01.2006 13:03
register_globals, umsetzung, form, edit sql TimmaY PHP Tipps 2005-2 9 09.08.2005 22:31
[Browsergame] Hilfe bei Umsetzung Beitragsarchiv 28 05.03.2005 09:16
Problem mit Umsetzung einer Funktion Datenbanken 1 20.12.2004 14:37
Hilfe bei Umsetzung Datenbankanwendung PHP Tipps 2004 1 03.11.2004 20:24
Umsetzung eines Pluginsystems /tmp PHP-Fortgeschrittene 18 14.09.2004 22:58
"new COM()" -Umsetzung auf Server mit FreeBSD PHP-Fortgeschrittene 14 18.08.2004 10:54

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spesentabelle krone, datenbank \gemeinsam genutzte attribute\, cakephp datenbanksichten, krone spesentabelle, zustandstabelle oop

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:13 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum