php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 7 Stimmen, 5,00 durchschnittlich.
  #16 (permalink)  
Alt 03-05-2013, 10:15
litterauspirna
 Registrierter Benutzer
Links : Onlinestatus : litterauspirna ist offline
Registriert seit: Nov 2007
Beiträge: 364
litterauspirna ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nunja es ist ja auch der Sinn keine Abhängigkeiten da drin zu schaffen. Eine Maschine und ein Artikel haben dierekt keie Abhängigkeit.

Artikel und Maschinen, die diese produziert haben musst z.B. in deiner Datenbank unterbringen. Über geeigente Models kannst du dann diese Daten in einem Zusammenhang auslesen. Eine Abhängigkeit zwischen Maschine und Artikel wird somit nur in der Datenbank gebildet, da wo sie auch hingehört. In deiner Software hat diese Abhängkeit nichts zu suchen.

In deiner DB stellst du ja auch erst die Abhängigkeit Auftrag -> Auftrag Details her. Somit also auch die Abhängikeit Maschine -> Artikel.

Softwaretechnisch kann man sich den Ablauf so vorstellen.

1.) Auftrag kommt zu stande
2.) zu Produzierende Artikel werden aus dem Auftrag entnommen
3.) Maschinen für Aufragsproduktion werden bereitgestellt
4.) Maschinen werden für Auftragsproduktion konfiguriert (Anzahl Produkte z.B.)
5.) Herstellungsprozess wird gestartet, die Maschinen stellen nun Teilartikel oder Artikel her. Da musst du dich eben Softwaretechnisch auch darum kümmern, es kann ja auch vorkommen das für die Fertigstellung von Produkten Abhängigkeiten entstehen. Heist das erst ein Teil des Produktes fertig gestellt sein muss bevor der andere Teil produziert werden kann und erst danach ein ganzes Produkt entsteht.
6.) Während der Produktion werden Werte der Maschinen etc. in die DB geschrieben.
7.) Produktion für Auftrag ist fertiggestellt, alle Maschinen haben ihre Arbeit getan.
8.) Auftragsprotokoll wird über die gesamte Auftragsproduktion erstellt.

Das ist mal so der grobe Ablauf.

Ich emfpehle dir hier, sehr viel Zeit in die Planung und die Modelierung deiner Software zu investieren bevor du auch nur eine Zeile Code schreibst.
Benutze gegebenenfalls wenn es sich dafür anbietet Frameworks, die es dir erleichtern dein Projekt gut strukturiert und sauber getrennt umzusetzen.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
Mit Zitat antworten
  #17 (permalink)  
Alt 04-05-2013, 23:08
Guenni61
 Registrierter Benutzer
Links : Onlinestatus : Guenni61 ist offline
Registriert seit: Nov 2011
Ort: Viersen
Beiträge: 128
Guenni61 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von litterauspirna Beitrag anzeigen
Hallo,
. . .
[EDIT]
@Guenni61, dein Beispiel von Vererbung (Ableitung) kann man leider falscher nicht darstellen. Eine Maschine ist kein Artikel,
sondern eine Maschine produziert einen Artikel, besser sogar sie erzeugt ein Produkt, ein Artikel wird es erst wenn es Angeboten wird
zum Kauf und über einen Preis etc. verfügt.
Eine Auswertung ist auch keine Maschine, in einer Auswertung werden höchstens Maschinen die für einen Produktionsauftrag benutzt
wurden gelistet mit diversen Detail Auswertungsdaten.
Immer daran denken, eine Vererbung stellt immer (ausnahmslos immer) einen spezialisierten IST Zustand von Klassen (Objekten) dar.
Für den TE wären hier noch Punkte wie Dependensy Injection und Dependensy Injection Container ne gute Sache zum nachlesen.
Hi Litter,

zu aller erst ging es dem TO ja mal darum, solche Zugriffe auf Variablen zu vermeiden:
$this->maschine['testmaschine1']->artikel['1000']->prodauf['1215']->proddetail[0]

Dass eine Maschine kein Artikel (kein Produkt) ist und eine Auswertung keine Maschine, ist mir schon klar. Das soll diese Ableitung,
oder besser gesagt Erweiterung, denn to extend bedeutet ja erweitern, auch gar nicht ausdrücken. Sondern das, was to extend
bedeutet: Eine Klasse um die Variablen und Methoden einer anderen Klasse zu erweitern. Statt also in einer Klasse eine Variable vom Typ andere Klasse
anzulegen, eine Klasse von der anderen die Eigenschaften und Methoden erben lassen, damit die erbende Klasse direkt Zugriff auf Eigenschaften hat.
Und nicht über $this->maschine['testmaschine1']->artikel['1000']->prodauf['1215']->proddetail[0].

Jetzt könntest du natürlich einwenden: "Deine Vererberei (Ableitung, Erweiterung) ist Quatsch, dann kann ich auch alle Eigenschaften und Methoden in
einer Klasse unterbringen". Kann man das? Ich denke nein. Jedes Produkt hat hat spezielle Parameter. Und dem nach kann ich ein Produkt nur auf einer Maschine
fertigen, die für ein bestimmtes Produkt gebaut wurde.

class produkt1{hat spezielle Parameter1}
class produkt2{hat spezielle Parameter2}
class produkt3{hat spezielle Parameter3}

class maschine1{erfüllt spezielle Parameter1} extends class produkt1 {hat spezielle Parameter1}
class maschine2{erfüllt spezielle Parameter2} extends class produkt2{hat spezielle Parameter2}
class maschine3{erfüllt spezielle Parameter3} extends class produkt3{hat spezielle Parameter3}

Heißt das jetzt, dass ich aus einer Maschine ein Produkt mache, oder aus einem Produkt eine Maschine?

Nein. Es heißt einfach nur, dass ich in einer Instanz einer Klasse die jeweiligen Eigenschaften und Methoden beider Klassen nutzen kann,
um einen Produktionsauftrag darzustellen.

$instanz1 = new maschine1;
$instanz2 = new maschine3;

Zu deiner Aussage . . .

Artikel und Maschinen, die diese produziert haben musst z.B. in deiner Datenbank unterbringen. Über geeigente Models kannst du dann diese Daten
in einem Zusammenhang auslesen. Eine Abhängigkeit zwischen Maschine und Artikel wird somit nur in der Datenbank gebildet, da wo sie auch hingehört.
In deiner Software hat diese Abhängkeit nichts zu suchen.

. . . könnte man jetzt die Frage stellen: Wer war denn zuerst da? Das Huhn oder das Ei?

Üblicherweise ist eine Datenbank doch leer, wenn ich eine Software das erste mal benutze. Was wäre denn jetzt zu tun?
Die Datenbank zu erstellen, Tabellen zu füllen, und dann erst die Software benutzen?

Oder ist es nicht so, dass die Software die Datenbank/Tabellen füllt?

Gruß
Günni
Mit Zitat antworten
  #18 (permalink)  
Alt 05-05-2013, 11:04
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 Guenni61 Beitrag anzeigen
Jetzt könntest du natürlich einwenden: "Deine Vererberei (Ableitung, Erweiterung) ist Quatsch, dann kann ich auch alle Eigenschaften und Methoden in
einer Klasse unterbringen". Kann man das? Ich denke nein. Jedes Produkt hat hat spezielle Parameter. Und dem nach kann ich ein Produkt nur auf einer Maschine
fertigen, die für ein bestimmtes Produkt gebaut wurde.

class produkt1{hat spezielle Parameter1}
class produkt2{hat spezielle Parameter2}
class produkt3{hat spezielle Parameter3}

class maschine1{erfüllt spezielle Parameter1} extends class produkt1 {hat spezielle Parameter1}
class maschine2{erfüllt spezielle Parameter2} extends class produkt2{hat spezielle Parameter2}
class maschine3{erfüllt spezielle Parameter3} extends class produkt3{hat spezielle Parameter3}

Heißt das jetzt, dass ich aus einer Maschine ein Produkt mache, oder aus einem Produkt eine Maschine?
Ja, genau das heißt das. Wer sowas macht, hat den Sinn von Ableitungen (noch) nicht verstanden.

Programmieren findet erstmal mit Papier und Bleistift statt. Zeichne dir Klassen/Objekte und deren Methoden und Eigenschaft auf Papier auf. Welche Zusammenhänge gibt es?

Wenn du ein Objekt in einem anderen Objekt benötigst, dann übergib es. Eine Ableitung dient nicht dazu die Funktionalität eines Objekts in einem anderen Objekt zur Verfügung zu stellen.

Zitat:
Zitat von Guenni61 Beitrag anzeigen
Üblicherweise ist eine Datenbank doch leer, wenn ich eine Software das erste mal benutze. Was wäre denn jetzt zu tun?
Die Datenbank zu erstellen, Tabellen zu füllen, und dann erst die Software benutzen?

Oder ist es nicht so, dass die Software die Datenbank/Tabellen füllt?
Üblicherweise ist es so, dass man sich das Datenmodell auf Papier (oder von mir aus auch in elektronischer Form) aufzeichnet. Lange bevor man überhaupt ans Programmieren denkt. Aus dem Datenmodell ergibt sich dann automatisch die Datenbankstruktur sowie auch die Modell-Klassen. Es gibt sogar Tools, die aus einem Datenmodell die Datenbankstruktur und Klassen automatisiert erstellen. Also das ist eigentlich eine ziemlich "dumme" Arbeit. Der größere Leistung ist erst mal ein vernünftiges Datenmodell zu entwickeln. Und dafür braucht man Hirn und keinen Computer.

Geändert von h3ll (05-05-2013 um 11:06 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 05-05-2013, 17:43
Relativity
 Registrierter Benutzer
Links : Onlinestatus : Relativity ist offline
Registriert seit: Apr 2013
Beiträge: 7
Relativity befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen,

ich bedanke mich hiermit abschließend bei allen Beteiligten für die vielen Antworten, möchte aber abschließend noch folgendes erneut zum Ausdruck bringen, da es etwas untergegangen zu sein scheint:

- die Datenbank, aus der die Daten stammen, ist nicht von mir, sondern aus einem bestehenden ERP System, an das ich nicht dran packen werde/kann/darf. Es ist daher contra-produktiv über die Struktur der Daten und deren Optimierung als Lösungsvorschlag zu reden, da ich nicht dran darf

- der gesamte Produktionsprozess ist bereits abgebildet, es geht hier um eine nachträgliche Auswertung der Effektivität abgeschlossener Produktionsaufträge. Ob ein Fehler im Modeling der Datenbank und der Art der Ablage der Daten damals gemacht wurde vom Entwickler - ich weiss es nicht - das ist aber auch nicht meine Aufgabe dies zu beurteilen sondern mein Job ist es die Daten dennoch auszuwerten.

- Eine Vorselektion innerhalb der Datenbank ist nicht möglich, da innerhalb der Datenbank es keine Verknüpfung zwischen der Maschine und dem auf ihm gefertigten Produkt gibt, es gibt eine Sortier-Reihenfolge in welcher immer zuerst die Maschine steht, anschließend die Arbeitsschritte des Personals, auf dieser Maschine, dann folgt wieder eine Maschine etc. bis der produktionsauftrag abgeschlossen ist - nichts was ich in irgendeiner Weise (mit meinem SQL Wissen) effektiv verarbeiten konnte, da nur Teile des Produktionsauftrags einer Maschine zugewiesen sind, und andere wiederrum einer anderen Maschine. Daher gibt es in den Header Daten des Prod.Auftrags auch keine Information zur Maschine, da mehrere verwendet werden.

- meine Zielführung war nicht gewesen neue Datenbanken anzulegen und quasi alle Daten hinterher doppelt zu haben, oder gar das gesamte Prod.Modul der ERP Lösung neu zu entwickeln, sondern die bestehenden Daten möglichst effektiv auszuwerten aus der Datenbank, in der sie bereits stehen.

- Ich habe nicht eine Klasse extended - darum ging es auch nie - es ging um Objekte, welche wiederrum Sub-Objekte erzeugen.

- Es ging primär darum, das die Verschachtelung von Objekten mit weiteren Sub-Objekten innerhalb des Quellcodes sehr unübersichtlich wurde und ich evtl. irgendetwas übersehen habe / noch nicht kannte, was dies hätte einfacher und übersichtlicher machen können.

- Ich bin nach wie vor der Meinung, das die Verwendung von entkoppelten Objekten, die in keinerlei Relation zueinander stehen, in meinem Fall sehr ressourcen-ineffektiv ist, da ich jedesmal alle Objekte durchlaufen lassen muss um die Objekte dem User darzustellen, welche die von ihm gewählte Maschine betreffen.



Im Normalfall hätte ich eigenständige Klassen für Maschinen, Artikel etc. gehabt, welche nichts miteinander zu tun gehabt hätten und hätte diese einfach mit speziellen SQL Querys mit Daten befüllt und hinterher ausgegeben.

Wie oben bereits erwähnt geht es in diesem Fall nicht, sondern alle Daten müssen über das Datum von / Datum bis ausgelesen werden und durch eine Schleife stur in die entsprechenden Objekte geschrieben werden.

Hierfür hatte ich nun zwei Lösungs-Möglichkeiten mir ausgedacht:

1. Die von mir beschriebene Sub-Objekt Methode, das die Maschine einfach ein Unterobjekt enthält, der Artikel, die auf ihr produziert werden usw.

2. Loose Objects, deren ID in dem logisch übergeordneten Objekt festgeschrieben werden. Als Beispiel:

$maschine[1000]->artikel

wäre dann ein Array in welchem die Artikelnummern stehen, der Artikel, die auf ihr gefertigt wurden, z.B.:

$maschine[1000]->artikel[0] wäre 1234
$maschine[1000]->artikel[1] wäre 5678

in Bezug zu

$artikel[1234] und $artikel[5678]

Ich bin von dieser Idee aber abgerückt, als ich merkte, das der Artikel 1234 sowohl auf Maschine 1000, als auch auf Maschine 1001 produziert werden kann, und in dem Fall nicht summiert werden darf, da ausgewertet werden soll, auf welcher Maschine er effektiver produziert wurde.

Somit bin ich auf meine erste Variante zurück gegangen und musste leider in die Subobjects runter gehen.


In diesem Sinne, euch allen vielen Dank und ein sonniges Wochenende.

Gruss
Relativity
Mit Zitat antworten
  #20 (permalink)  
Alt 06-05-2013, 15:54
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

also das DB problem scheint dir die arbeit ja ungemein zu erschweren und auch der community hier.

also ich weiß noch von meiner zeit als ich selber in einem unternehmen war das selber ein ERP system entwickelt hat und gelegentlich auch mit anderen ERP systeme kommunizieren musste, das dort mit visual fox pro der export aus dem externen ERP system so umgebaut worden ist das unser ERP system das verstehen konnte.

sowas könntest du doch auch machen oder nicht? natürlich ginge das auch mit php und jede nacht rackert der cron durch und erstellt dir deine DB so wie du sie brauchst.

oder wäre das keine option?

ich glaube die zeit die du damit verwendet hast mit der bestehenden DB klar zu kommen hätte gereicht um diese schnittstelle zu schreiben.
__________________
Gruß
Uzu

private Homepage
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
[OOP] Smarty und OOP: Object id #1 Rudelwolf PHP Developer Forum 14 08-07-2007 15:40
[OOP] globale variable in PHP5 OOP Creativ PHP Developer Forum 10 20-04-2006 08:52
[OOP] Programm für UML OOP Modellierung ? compuboy1010 Apps und PHP Script Gesuche 2 17-07-2003 14:15
OOP... Sky PHP Developer Forum 9 14-11-2001 14:59
OOP cassikov PHP Developer Forum 1 10-08-2001 12:05

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 19:49 Uhr.