2017 © Pedro PelĂĄez
 

library oda

API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.

image

phoenixrvd/oda

API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.

  • Wednesday, February 28, 2018
  • by PhoenixRVD
  • Repository
  • 1 Watchers
  • 0 Stars
  • 6 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 5 Versions
  • 0 % Grown

The README.md

Object Data Accessor (ODA)

Minimum PHP Version Latest Stable Version composer.lock License, (*1)

Build Status Code Climate StyleCI Test Coverage BCH compliance Latest Unstable Version, (*2)

, (*3)

Features

  • Vereinfacht das Nutzen von Datenhaltungsobjekten.
  • Erhöht die Lesbarkeit von Quellcode, durch das Minimieren von LOC.
  • Standardisiert DAO-Schicht mit einem kleinem Package, ohne große Frameworks.

Installation

Bei der Installation ist Composer vorausgesetzt., (*4)

composer require phoenixrvd/oda

Basics

Angenommen, braucht man ein ein Objekt, welches genau 2 Datenfelder hat (foo und bar)., (*5)

Deklariert man Standard-Methoden, wird das Objekt wie Folgt aussehen:, (*6)

<?php

class MyDataObject {

    private $data = [];

    public function getFoo(){
        return $this->data['foo'];
    }

    public function setFoo($value){
        $this->data['foo'] = $value;
        return $this;
    }

    public function hasFoo(){
        return isset($this->data['foo']);
    }

    public function isFoo($value){
        return $this->hasFoo() && $this->data['foo'] === $value;
    }

    public function getBar(){
        return $this->data['bar'];
    }

    public function setBar($value){
        $this->data['bar'] = $value;
        return $this;
    }

    public function hasBar(){
        return isset($this->data['bar']);
    }

    public function isBar($value){
        return $this->hasBar() && $this->data['bar'] === $value;
    }

}

HÀtte man nicht 2 sondern 10 Properties, wird das Object gleich um 300 LOC lÀnger., (*7)

Nutzt man das Packet, bekommt man gleiche FunktionalitĂ€t wesentlich kompakter. Auch wenn anzahl von Datenfelder wĂ€chst, vergrĂ¶ĂŸert man nicht den Code-Basis., (*8)

Im Beispiel Unten ist vorheriges Objekt umgeschrieben:, (*9)

<?php

use PhoenixRVD\ODA\Interfaces\OdaObject;
use PhoenixRVD\ODA\Traits\DataAccessors;
use PhoenixRVD\ODA\Traits\ValueObject;

class MyDataObject implements OdaObject {

    use ValueObject, DataAccessors;

}

IDE-Helper

Damit die IDE auch alle Objekt-Methoden kennt und man AutovervollstÀndigung nutzen kann, sollte man die Methoden in der Klasse-Signatur festlegen., (*10)

Es ist aber immer noch kompakter als vorher., (*11)

<?php 

/**
 * @method $this  setFoo(mixed $value)
 * @method string getFoo()
 * @method bool   isFoo(mixed $value)
 * @method bool   hasFoo()
 *
 * @method $this  setBar(mixed $value)
 * @method string getBar()
 * @method bool   isBar(mixed $value)
 * @method bool   hasBar()
 */

Standard-Accessoren

Standard-PrÀfixes:, (*12)

PrÀfix Beschreibung
get Gibt Wert eines Feldes zurĂŒck
set Setzt Wert eines Feldes
is(value) PrĂŒftob Wert exakt dem value Parameter entspricht (Vergleich mit ===)
has PrĂŒft ob das Objekt ein Feld fĂŒr Daten enthĂ€lt (Equivalent: isset($array['value']))
asJSON Gibt Wert eines Feldes als formatiertes JSON-String zurĂŒck.

Eigene-Accessoren

Manchmal braucht man, dass bestimmte Felder eines Objektes formatiert zurĂŒckgegeben werden., (*13)

Z.b. $this->data['created_at'] ist Unix-Timestamp, man braucht es aber als RFC822-Datum., (*14)

Im Bespiel ist beschrieben, wie man der API ein date - Accessor beibringt. Damit wird voll automatisch Unix-Timestamp nach Datum konvertieren und man es mit $this->dateCreatedAt() ĂŒberall verwenden kann., (*15)

Beispiel

  1. Accessor-Klasse anlegen
<?php 

use PhoenixRVD\ODA\Methods\AbstractMethod;
use PhoenixRVD\ODA\Interfaces\OdaObject;

class DateRFC822 extends AbstractMethod {

    public function execute(OdaObject $object, array $attributes = array()) {
        $data = $object->getData();

        return date(DATE_RFC822, $data[ $this->propertyName ]);
    }
}
  1. Trait fĂŒr Wiederverwendbarkeit anlegen, (*16)

    ```php <?php, (*17)

use PhoenixRVD\ODA\MethodFactory;, (*18)

trait MyObjectDecorator {, (*19)

public function __call($name, $arguments) {
    return (MethodFactory::getInstance())
        ->setAccessor(new DateRFC822) // Eigenes Accessor bei der Factory registrieren
        ->makeMethod($name)
        ->execute($this, $arguments);
}

}, (*20)


3. Eigenes Trait an Stelle von Standard-Trait im Object verwenden. ```php <?php use PhoenixRVD\ODA\Interfaces\OdaObject; use PhoenixRVD\ODA\Traits\ValueObject; class MyDataObject implements OdaObject { use ValueObject, MyObjectDecorator; }
  1. Einfach die Methode aufrufen
<?php

// Ausgabe: Tue, 11 Apr 2017 21:22:14 +0000
echo (new MyDataObject())->setCreatedAt(1491945734)->dateCreatedAt(); 

Hinweis

Projekte, die auf sehr hohe Leistung ausgelegt sind, sollten auf die Methodik generell verzichten. Diskussion dazu findet man hier., (*21)

Testing

composer oda:test

Code released under the MIT License., (*22)

The Versions

28/02 2018

dev-master

9999999-dev

API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

The Development Requires

by Viacheslav Wolf

28/02 2018

1.1.0

1.1.0.0

API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

The Development Requires

by Viacheslav Wolf

11/04 2017

1.0.3

1.0.3.0

API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Viacheslav Wolf

11/04 2017

1.0.2

1.0.2.0

API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Viacheslav Wolf

11/04 2017

1.0.1

1.0.1.0

API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Viacheslav Wolf