Osumi Framework
es en eu v9.8.0 GitHub

Zerbitzuak

Osumi Framework-eko zerbitzuak berrerabilgarriak diren klaseak dira, negozio-logika, eragiketa partekatuak edo osagai, modulu eta zereginetan erabiltzen diren erabilgarritasun-funtzioak biltzen dituztenak.

Angular zerbitzuen antzera jokatzen dute: arinak, konposagarriak eta osagaiak garbi eta fokatuta mantentzeko diseinatuta daude.

Zerbitzuek honako hau egiten laguntzen dizute:


1. Zer da Zerbitzu bat?

Zerbitzu bat OService hedatzen duen PHP klase bat da. Oinarrizko klaseak honako hau eskaintzen du:

Zerbitzu klaseak zure aplikazioak behar dituen edozein metodo publiko defini ditzake.


2. Zerbitzu bat sortzea

Zerbitzu bat honako honetan egon beharko litzateke:

src/App/Service/

Ohiko egitura:

namespace Osumi\OsumiFramework\App\Service;

use Osumi\OsumiFramework\Core\OService;

class UserService extends OService {
  public function getUserById(int $id): ?User {
    return User::findOne(['id' => $id]);
  }
}

Zerbitzuek normalean:


3. Zerbitzu bat osagai batean txertatzea

Ezin duzu zerbitzu bat txertatu klase batean propietatea deklaratzen den unean. Hau PHP hizkuntzaren muga bat da: PHP-k ez du onartzen funtzioak (adibidez, inject()) deitzea propietateen deklarazioen barruan.

Adibidez, hau baliogabea da PHPn:

private UserService $us = inject(UserService::class); // Ez da onartzen PHPn

Horregatik, zerbitzuak eraikitzailearen barruan injektatu behar dira:

class MyComponent extends OComponent {
  private ?UserService $us = null;

  public function __construct() {
    parent::__construct();
    $this->us = inject(UserService::class); // Zuzena
  }
}

Horrek ziurtatzen du zerbitzua eskuragarri dagoela run() exekutatzen denerako.


4. Zerbitzua osagai batean erabiltzea

Injektatu ondoren, zerbitzuko metodoetara normal sar zaitezke:

public function run(ORequest $req): void {
  $user = $this->us->getUserById(3);
  $this->user = $user;
}

Eredu tipiko bat hau da:

  1. Eskaeratik datuak atera (iragazkiak edo DTOak erabiliz, agian)
  2. Negozio-logika zerbitzuari delegatu
  3. Azken osagaiaren irteera prestatu

Osagaiak txikiak eta deklaratiboak izaten jarraitzen dute — zerbitzuek egiten dute lan astuna.


5. Zerbitzu baten bizi-zikloa

OService-k hasieratze batzuk automatikoki kudeatzen ditu:

Erregistratzailearen hasieraketa

Zerbitzu bakoitzak bere erregistratzailea du arazketa-informazioa idazteko.

Konfiguraziorako sarbidea

$this->getConfig()-k aplikazioaren konfigurazio orokorra ematen dizu.

Cache edukiontzirako sarbidea

$this->getCacheContainer()-k cache azpisistema orokorra ematen dizu.

Laguntzaile hauek zerbitzuak indartsuak eta egoera orokorretik deskonektatuak direla ziurtatzen dute.


6. Zerbitzuak non jarri

Jarraitu egitura hau:

src/
  App/
    Service/
      CinemaService.php
      UserService.php
      NotificationService.php

Izendatzeko konbentzioak:


7. Adibidea: Domeinuan zentratutako zerbitzua

class CinemaService extends OService {
  public function getCinemas(int $id_user): array {
    return Cinema::where(['id_user' => $id_user]);
  }

  public function deleteCinema(Cinema $cinema): void {
    $movies = $cinema->getMovies();
    foreach ($movies as $movie) {
      $movie->deleteFull();
    }
    $cinema->delete();
  }
}

Zerbitzu honek:

Logika hau zentralizatuz, zinema-eragiketak behar dituen osagai guztiek berrerabili dezakete.


8. Praktika onak


9. Noiz erabili behar duzu zerbitzu bat?

Erabili zerbitzu bat honako kasu hauetan:

Ez erabili zerbitzu bat honako kasu hauetan:


10. Laburpena

Zerbitzuak Osumi Framework-aren oinarrizko eraikuntza-blokeetako bat dira:

Zerbitzuak modu eraginkorrean erabiltzeak aplikazio arkitektura mantentze-lanetarako errazago, eskalagarriagoa eta antolatuagoa lortzen du.