承接 flyokai/generic 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

flyokai/generic

最新稳定版本:0.1.0

Composer 安装命令:

composer require flyokai/generic

包简介

Generics definitions

README 文档

README

User docs → README.md · Agent quick-ref → CLAUDE.md · Agent deep dive → AGENTS.md

Builder, tuner, and execution-pipeline patterns expressed with PHPDoc generics — a tiny but pervasive primitive across Flyokai.

The package gives you four parametric interfaces — State<T>, Builder<T>, Tuner<T>, Execution<T> — plus DI-aware containers that compose them. Tuners are how Flyokai lets multiple modules contribute settings to one shared object (an InputDefinition, a Router, an ACL builder, …) without coupling them.

Features

  • State<T> / Builder<T> — generic state holder + builder pipeline
  • Tuner<T> / TunerContainer<T> — composable, ordered state mutators
  • Execution<TContext> / ExecutionContainer<TContext> — composable side-effect runners
  • InvalidStateException — base for builder validation errors
  • Fully PHPDoc-@template annotated for static analysers

Installation

composer require flyokai/generic

Quick start

use Flyokai\Generic\State;
use Flyokai\Generic\BuilderImpl;
use Flyokai\Generic\Tuner;

/** @implements State<\stdClass> */
final class ObjectState implements State
{
    public function __construct(public \stdClass $value) {}
    public function get(): \stdClass { return $this->value; }
}

/** @implements Tuner<\stdClass> */
final class GreetingTuner implements Tuner
{
    public function tune(State $state): State
    {
        $state->value->greeting = 'hello';
        return $state;
    }
}

/** @extends BuilderImpl<\stdClass> */
final class ObjectBuilder extends BuilderImpl {}

$builder = new ObjectBuilder(
    fn() => new ObjectState(new \stdClass()),
    new GreetingTuner(),
);

$obj = $builder->build();   // \stdClass { greeting: "hello" }

Composing tuners

use Flyokai\Generic\TunerContainer;
use Amp\Injector\Composition;

$tuners = new TunerContainer($composition);  // Composition from amphp-injector
$state  = $tuners->tune($state);             // applies every tuner in order

TunerContainer accepts an Amp\Injector\Composition of Tuner<T> instances — each module registers its own tuner via DI and ordering (before/after/depends) decides who runs when.

Executions

Execution<TContext> is the side-effect cousin of Tuner — it runs against a context but does not return modified state:

use Flyokai\Generic\Execution;
use Flyokai\Generic\ExecutionContainer;

/** @implements Execution<MyCtx> */
final class LogExecution implements Execution
{
    public function execute(mixed $context): void
    {
        $context->logger->info('done');
    }
}

$pipeline = new ExecutionContainer($composition);
$pipeline->execute($context);

Subclassing ExecutionContainer and overriding executeChild() lets you inject hooks (timing, error handling) around every child execution.

Where it shows up

  • flyokai/symfony-consoleInputState is State<InputInterface>; RequiredOptionHandler and friends are tuners.
  • flyokai/application — ACL Builder, RouterBuilder, ServerBuilder all expose tuner compositions so modules can extend them.
  • flyokai/data-service, flyokai/oauth-serverRouterBuilder middleware and route registration.

Gotchas

  • BuilderImpl is abstract; you must subclass to constrain the generic parameter.
  • Tuner order in a TunerContainer is significant — wire ordering carefully via compositionItem(...) before/after/depends.
  • ExecutionContainer does not aggregate return values — they are intentionally void.
  • PHPDoc @template annotations are static-analysis only; nothing enforces the type at runtime.

See also

  • flyokai/amphp-injector — provides the Composition mechanism TunerContainer and ExecutionContainer rely on.

License

MIT

统计信息

  • 总下载量: 5
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固