hudsxn/ioc-core

一个简单的IOC框架,适用于快速API开发,非常适合微服务

1.0.1 2024-08-13 20:27 UTC

This package is auto-updated.

Last update: 2024-09-13 20:41:20 UTC


README

控制反转(IoC)是软件开发中的一个设计原则,旨在将系统的控制流程与实现细节解耦。不是让高层模块直接控制低层模块或组件,而是将这种责任转移到框架或容器。这种关注点的分离增强了模块化和灵活性,使得组件可以被替换或修改而不影响整体系统。IoC最常见的使用是依赖注入,其中外部实体提供必要的依赖,而不是由类自己创建或查找。

实现IoC可以使代码更易于测试和维护,因为它消除了组件之间的直接依赖关系,使得系统更能适应变化。通过反转控制流程,开发者可以专注于编写业务逻辑,同时依靠IoC容器来处理依赖项的连接、生命周期管理和其他跨切面关注点。这个原则是许多现代框架和库的基础,这些框架和库利用IoC来简化开发过程并促进最佳实践。

入门,index.php和cli.php

index.php
<?php

    require_once('vendor/autoload.php');
    
    use Hudsxn\IocCore\Application;
    //                     fileDir, runType, beforeRequest
    $app = new Application("src", "web", function() {
        
        /**
         * @var \Hudsxn\IocCore\AppRouter
         */
        $router = $this->getApplicationRouter();

        $router->setNoRouteAction(function(string $method, string $path) {
            // do this when not found, you can use this to fallback on frontend apps.
        });

    }); 
cli.php
<?php

    require_once('vendor/autoload.php');
    
    use Hudsxn\IocCore\Application;
    //                     fileDir, runType, beforeRun
    $app = new Application("src", "cli", function() {
        
    }, $argv); 
.env或环境变量
mysql_host="localhost"
mysql_user="root"
mysql_charset="utf8"
mysql_password="password"
mysql_db="my_db"

如果您想使用MySQL,则必须使用此框架的这些字段,这是通过PDO适配器完成的,并采取了安全措施。

为React、Vue和Svelte构建的PHP框架

此框架在设计时考虑到模块化、易用性、可读性和可维护性。

  • 快速实体生成

    不必单独创建和映射实体到服务,再到控制器;存在一个简单的工具来生成实体、控制器和服务,并具有自动CRUD方法。

      php cli.php @build/entity --className=App\Users\User

    然后它会生成一个空的实体、服务和控制台,只需添加字段即可创建实体。

  • 快速前端开发

    编写大量的前端样板代码很乏味,烦人的null引用,将所有实体和端点映射到异步TypeScript或JavaScript函数和类型。

      # --sourceType either 'ts' or 'js'
      php cli.php @build/generate-types --sourceType=ts --outputDir=frontend/api"
  • 依赖注入

    使用0脚本方法(除index.php和cli.php外),所有依赖项都得到管理并易于访问,依赖注入适用于所有类,只需在类构造函数中传递一个类参数即可。使用此IoC框架的另一个巨大好处是自动对象映射,从输入流(POST、PUT、PATCH)中获取的数据被解析并转换为可读、修改或保存的对象。

  • 事件驱动

    所有实体都可以使用事件,在实体的生命周期中,将有6个事件被触发,分别是BeforeCreateAfterCreateBeforeUpdateAfterUpdateBeforeDeleteAfterDelete,你可以非常容易地利用这些事件。

      <?php
    
          namespace App\MyProject;
    
          use Hudsxn\IocCore\Attribute\ListenFor;
    
          class ProjectEvents
          {
              #[ListenFor('BeforeCreate', Project::class)]
              public function beforeCreate(Project $entity): Project 
              {
                  // example.
                  $entity->UserId = $this->getUserId();
              }
    
              #[ListenFor('BeforeUpdate', Project::class)]
              public function beforeUpdate(Project $mutated, Project $existing): Project
              {
                  if ($existing->UserId == $mutated->UserId) {
                      return $mutated;
                  }
                  throw new Exception("Not your object");
              }
    
          }
  • 属性优先框架

    属性优先的代码库更容易维护和理解,属性在PHP中持有关于目标的信息。属性是这个框架中的神,它们与依赖注入器一起工作,真正赋予这个框架力量。