Simplicidad y Consistencia
Un framework centrado en entidades. Declara la estructura del dominio una vez y Nyoze resuelve rutas, validación y persistencia.
Consistencia de principio a fin.
class UserEntity extends EntityDefinition
{
public function define(Entity $entity): void
{
$entity
->fields(
Field::string('name')->required(),
Field::email('email')->unique(),
Field::password('password')->hidden(),
)
->can('profile', ProfileAction::class)
->invariant(EmailRequired::class);
}
}
Consistencia
Modelo centrado en entidades. Un patrón. Cada proyecto.
Entidad como núcleo
Campos, relaciones y restricciones declarados en un solo lugar. El sistema se organiza a partir de esa definición.
Estandarización estructural
Las entidades definen estructura, las actions definen comportamiento, los repositories manejan los datos. Sin variación.
Previsibilidad
Cualquier desarrollador localiza cualquier parte del código sin orientación. El patrón comunica por sí mismo.
Simplicidad
Menos conceptos, menos archivos, menos decisiones.
Complejidad reducida
Sin rutas manuales, sin service providers, sin configs dispersos. La entidad declara, el framework resuelve.
Lectura clara
Una entidad se lee como una especificación. Campos, actions y reglas visibles en un único archivo.
Menor costo cognitivo
El desarrollador se enfoca en el dominio, no en la infraestructura del framework.
Cómo funciona
La entidad es el núcleo. Todo parte de ella.
Define la entidad
Campos, tipos y restricciones con API fluida.
$entity->fields(
Field::ref('id_user', 'users'),
Field::string('title')->required(),
Field::string('status')->default('draft'),
);
Conecta el comportamiento
Cada ->can() se convierte en un endpoint HTTP.
$entity
->can('create', CreateAction::class)->post()
->can('list', ListAction::class)->get();
Aísla la lógica
Una action, un ActionContext, un Result.
class CreateAction
{
public function __invoke(ActionContext $ctx): Result
{
$project = $ctx->repo()->save('projects', [
'title' => $ctx->input('title'),
'id_user' => $ctx->userId(),
]);
return Result::created($project);
}
}
Ejecuta
Kernel, repositorio, entidades. Listo.
$kernel = Kernel::load(function (App $app) {
$app->useRepository(
new PdoRepository(new PDO('sqlite:app.db'))
);
$app->load([UserEntity::class]);
});
$kernel->app()->run();
Database & Migrations
Providers conectables, schema automático y CLI integrada.
Providers conectables
MySQL, SQLite o tu propio provider. La generación de SQL está desacoplada — cambia de base de datos sin alterar entidades.
Schema automático
Nyoze lee tus entidades y genera migrations SQL automáticamente. Sin escribir DDL manual.
IDs configurables
Snowflake, AutoIncrement, UUID o ULID. Elige la estrategia global o por entidad.
CLI integrada
Genera migrations, ejecuta, revierte e inspecciona el schema directo desde la terminal.
Configuración fluida
Configura la base de datos con una sola llamada. El provider, la conexión y la estrategia de ID quedan centralizados.
$app->database()->mysql([
'host' => '127.0.0.1',
'database' => 'myapp',
'user' => 'root',
'pass' => 'secret',
]);
CLI
Genera, ejecuta y gestiona migrations sin salir de la terminal.
# make:migration
$ php nyoze make:migration
# migrate
$ php nyoze migrate
# migrate:rollback
$ php nyoze migrate:rollback
# schema:dump
$ php nyoze schema:dump
Beneficios concretos
Mantenimiento facilitado
Estructura previsible. Cualquier desarrollador navega el proyecto sin curva adicional.
Escalabilidad controlada
Agregar entidades sigue siempre el mismo proceso. El proyecto crece sin deuda técnica.
Consistencia temporal
Del primer endpoint al centésimo, el patrón es el mismo.
Persistencia desacoplada
Cambia de base de datos sin alterar la lógica de negocio.
Sin lock-in
Sin ORM propietario, sin globals. Código de dominio portable.
HTTP y CLI
Mismas entidades, mismas actions. Dos modos de ejecución.
Proyecto independiente, mantenido con tiempo personal. Si Nyoze tiene sentido en tu flujo de trabajo, un café ayuda a mantener todo en movimiento.
Invítame un caféConsistencia de principio a fin.
$ composer require pollauf/nyoze