SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Entwicklung und Softwaredesign

PHP Entwicklung und Softwaredesign Hier können strukturelle (Programmier-) Konzepte diskutiert und Projekte vorgestellt werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 06.05.2009, 16:47:25
Benutzerbild von Indyk
Indyk Indyk ist offline
Member
 
Registriert seit: Aug 2006
Ort: Lübeck
Alter: 36
Beiträge: 900
Indyk eine Nachricht über ICQ schicken
Abhängigkeiten und Voraussetzungen speichern (best practice)

Hallo Entwickler,

ich stehe bei einem Projekt vor der Problematik Abhängigkeiten/ Voraussetzungen zu speichern. Allerdings bin ich mir immer noch nicht ganz schlüssig wie es am besten ist und hoffe da auf eure Erfahrungen.

Die Abhängigkeiten können sehr variable sein, um x auszuführen muss y und z erfüllt sein
um x auszuführen muss x vorhanden sien und z einen bestimmten zustand haben und z darf nicht vorhanden sein.

Wie bilde ich das am besten ab?
Vorgeschlagen wurde mir bist jetzt eine
  • Matrix Tabelle (da bin ich noch am recherchieren und wäre über evtl. kurze erklärungen erfreut)
  • Views anlegen für jede "Regel" (AND x= ? AND y = ? etc..)
  • Eine Tabelle mit FS zu X und eine zeile pro Voraussetzung.
  • Voraussetzungen als Mehrdimensionales Array abbilden.
Wenn ihr noch mehr ideen habt, die vll. besser / einfacher / perfomanter sind bin ich sehr gespannt diese zu hören.

Falls meine Beschreibung noch Unklarheiten offen lässt werde ich diese bei nachfrage natürliche versuchen zu klären. Danke für eure Zeit.
Mit Zitat antworten
  #2  
Alt 07.05.2009, 09:16:01
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 46
Beiträge: 1.938
AW: Abhängigkeiten und Voraussetzungen speichern (best practice)

welche art von abhängigkeiten meinst du konkret - module einer anwendung, einzelne funktionen, daten... ?

cx
Mit Zitat antworten
  #3  
Alt 07.05.2009, 11:03:30
Benutzerbild von Indyk
Indyk Indyk ist offline
Member
 
Registriert seit: Aug 2006
Ort: Lübeck
Alter: 36
Beiträge: 900
Indyk eine Nachricht über ICQ schicken
AW: Abhängigkeiten und Voraussetzungen speichern (best practice)

Hallo Cortex, danke für deine Antwort,

ich bin mir nicht sicher was für auswirkungen dieser unterschied hat, aber ich denke mit "funktionen" trifft es ganz gut.

Ich habe mir auch schon die Rechteverwaltung von ein paar (wenigen) CMS angeschaut allerdings konnte ich dort auch keine inspiration finden. Zumal es halt keine rechte und rollen zum vergeben sind, sondern vorrausetzungen die man erfüllen muss.
Mit Zitat antworten
  #4  
Alt 07.05.2009, 17:35:23
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 14
Beiträge: 2.269
AW: Abhängigkeiten und Voraussetzungen speichern (best practice)

Ich weiß auch nicht genau was du meinst...
Sind das "statische" Abhängigkeiten?
Also z.B. zwischen Klassen, dann wäre evtl das Dependency Injection Pattern was für dich.

Oder eine Registry, wo du alle Abhängigkeiten sammelst.

Geändert von DokuLeseHemmung (07.05.2009 um 17:36:46 Uhr)
Mit Zitat antworten
  #5  
Alt 13.05.2009, 11:42:40
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 46
Beiträge: 1.938
AW: Abhängigkeiten und Voraussetzungen speichern (best practice)

Indyk, hat sich das problem bereits erledigt / bist du zu einer lösung gekommen?

dies hier bekomme ich nicht ganz zusammen:

Zitat:
Zitat von Indyk Beitrag anzeigen
[...] ich denke mit "funktionen" trifft es ganz gut.
vs.

Zitat:
Zitat von Indyk Beitrag anzeigen
Ich habe mir auch schon die Rechteverwaltung von ein paar (wenigen) CMS angeschaut [...]
gehts also darum, dass bestimmte user(-gruppen) nur bestimmte befugnisse haben / nur bestimmte aufgaben erledigen dürfen?

cx
Mit Zitat antworten
  #6  
Alt 13.05.2009, 16:34:44
Benutzerbild von Indyk
Indyk Indyk ist offline
Member
 
Registriert seit: Aug 2006
Ort: Lübeck
Alter: 36
Beiträge: 900
Indyk eine Nachricht über ICQ schicken
AW: Abhängigkeiten und Voraussetzungen speichern (best practice)

Ok mit meinem Versuch es Allgemein zu halten hat wohl den Erklärungen entgegengewirkt.

@cortex
hat sich noch nicht erledigt, musste mich aber auf meine Abschlussprüfung vorbereiten ( :

Ich versuch es also mit Beispielen.

Szenario 1
Ich befinde mich in einem shopsystem und möchte Ware x bestellen, das darf ich aber nur wenn Ware y sich in meinem Einkaufskorb befindet.

Ware y kann ich nur dann kaufen wenn ich schon 1 jahr Kunde bin und min 10 Artikel bestellt habe.

Szenario 2
Ich beifnde mich in eine Abrechungsoftware und rechne Positionen ab.

Position x darf nur 10mal im Monat abgerechnet werden
Position y darf nur abgerechnet werden wenn Position z abgerechnet wurde
Position a darf nur mit Position b abgerechnet werden.

Szenario 3
Browsergame

Skill X gibt es erst ab Level 7
Skill Y gibt es erst ab Skill A auf lvl2 und Skill C auf lvl3

Das sind nach meinem Verständnis Abhängigkeiten, und egal im welchen Szenario ich mich befinde müsste es doch eine Lösung geben diese abzubilden. Unabhängig davon ob es eine Artikel, eine Position oder ein Skill ist.

@cortex
um nochmal auf die Rechte zurück zu kommen, ich sah da eine Ähnlichkeit im verhalten. "User darf X nur ausführen wenn er in der Gruppe Y ist" ich dachte das wären auch Abhängigkeiten und ich könnte mir da was abschauen.

@DokuLeseHemmung
Danke für den Tipp mit dem pattern.
Mit Zitat antworten
  #7  
Alt 14.05.2009, 08:40:25
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 46
Beiträge: 1.938
AW: Abhängigkeiten und Voraussetzungen speichern (best practice)

Zitat:
Zitat von Indyk Beitrag anzeigen
hat sich noch nicht erledigt, musste mich aber auf meine Abschlussprüfung vorbereiten ( :
und...? ist es gut gelaufen?

Zitat:
Zitat von Indyk Beitrag anzeigen
Ich versuch es also mit Beispielen.
die beispiele sind irgendwo sehr unterschiedlich - möglicherweise ist für jede situation eine andere strategie angebracht. es wird sicher noch andere anwendungsdaten geben, die berücksichtigt werden müssen.

Zitat:
Zitat von Indyk Beitrag anzeigen
Matrix Tabelle (da bin ich noch am recherchieren und wäre über evtl. kurze erklärungen erfreut)
sicher ein gutes stichwort... eigentlich ein simples ding:

tabelle a: a.id | a.prop
tabelle b: b.id | b.prop

die matrix bringt beide tabellen zusammen:

tabelle m: m.id | a.id | b.id

das heisst, tabelle a und b dienen ausschliesslich der datenhaltung, tabelle m stellt verbindungen her - hier könnten deine abhängigkeiten gespeichert werden.

cx
Mit Zitat antworten
  #8  
Alt 14.05.2009, 09:04:39
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 14
Beiträge: 2.269
AW: Abhängigkeiten und Voraussetzungen speichern (best practice)

Ich sehe keine Möglichkeit das zu vereinheitlichen. Zumindest nicht alles.


Warenkorb:
Fall 1: Eignet sich recht gut zur Vereinheillichung.
Ein Container mit Inhalt. Da kann man sich jetzt noch überlegen ob der Inhalt Wissen um den Container haben darf. Oder besser nicht.
Wenn nicht, könnte das so aussehen:
PHP-Code:
interface MyContainer
{
  function 
add(ContainerInhalt $element);
}
 
interface 
ContainerInhalt
{
  function 
needs(); // return Dependency;

Fall 2: Ist eine Abhängigkeit ohne Bezug zum aktuellen Container.
Dazu ist eine ganz andere Logik nötig.

Abrechungsoftware:
Kein Container weit und breit. Also evtl mit Warenkorb Fall2 vergleichbar.

Browsergame Rechtesystem
und Warenkorb Fall2
Scheinen sich sehr ähnlich, scheint aber auch nur.

Das Zend_Acl ist in der Hinsicht sehr schön gemacht. Da kann man sich was abschauen. Hat aber den heftigen Nachteil. Dass immer ALLES, also die gesammt Struktur geladen werden muß. Bei zunehmender Applikationskomplexität ein Klotz am Bein.

------------------------------------------------------------------

Schlußendlich:
Du versuchst die Applikationslogik aus der Applikation heraus zu abstrahieren. Das wird nicht gehen.
Die Niere macht Stoffwechsel.
Die Lunge macht Stoffwechsel.
Die Leber macht Stoffwechsel.
Ja, alle machen Stoffwechsel. Haben also Input und Output. Das wars aber auch schon mit den Gemeinsamkeiten.


-------------------------------------------

Zitat:
@DokuLeseHemmung
Danke für den Tipp mit dem pattern.
Da kann ich eine Lösung für php5.3 anbieten. Evtl. kannst du sie ja auf einen Teil der Probleme anwenden.

Eine Kombination aus Registry, Factory und Dependency Injection Pattern.
Besonderheit: Die Abhängigkeiten werden erst zur Laufzeit aufgelöst.



PHP-Code:
<?php
// DIContainer.php
class DIContainer
{
  protected 
$values = array();

  public function 
__construct($file)
  {
    include 
$file;
  }

  public function 
__set($id$value)
  {
    
$this->values[$id] = $value;
  }
  
  public function 
__get($id)
  {
    if (!isset(
$this->values[$id]))
      throw new 
InvalidArgumentException("Value '$id' is not defined.");
    
$val $this->values[$id];
    return 
$this->is_lambda($val)?$val($this):$val;
  }

  public function 
__call($id,Array $params=array())
  {
    
$val $this->__get($id);
    if (!
is_callable($val))
      throw new 
InvalidArgumentException("Value '$id' is not callable.");
    return 
call_user_func_array($val,$params);
  }
  
  public function 
__isset($id)
  {
      return isset(
$this->values[$id]);
  }

  public function 
__unset($id)
  {
      unset(
$this->values[$id]);
  }

  protected function 
asSingleton(Closure $factory)
  {
    return  function (
DIContainer $di) use ($factory)
            {
              static 
$object null;
              if (
is_null($object)) $object $factory($di);
              return 
$object;
            };
  }
  
  protected function 
asLambda(Closure $lambda)
  {
    return  function () use (
$lambda)
            {
              return 
$lambda;
            };
  }
  
  protected function 
is_lambda($var)
  {
    return 
is_object($var) && 'Closure' === get_class($var);
  }
}
?>
PHP-Code:
<?php
// DIConfig.php
$this->alphadsn 'mysql://user:test@localhost/test';

$this->db1 $this->asSingleton(
                                  function (
DIContainer $di)
                                  {
                                    return new 
PDO($di->alphadsn);
                                  }
                               );
                                  
                                  
                                  
$this->Multiplikation $this->asLambda(
                                          function (
$a,$b)
                                          {
                                            return 
$a*$b;
                                          }
                                       );


$this->transform 'nl2br';

                                  
?>
PHP-Code:
<?php
// index.php5_3
error_reporting(E_ALL E_STRICT);
ini_set('display_errors'TRUE);

require_once 
"./DIContainer.php";

$di = new DIContainer('./DIConfig.php');


echo 
'Meldung: '.$di->db1->getAttribute(PDO::ATTR_CONNECTION_STATUS).'<br>';


echo 
$di->Multiplikation(3,5).'<br>';

// Alternativ:
$mul $di->Multiplikation;
echo 
$mul(3,5).'<br>';


echo 
$di->transform("a\nb").'<br>';
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:33:16 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.


© 2001-2023 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt