Apiato 应用程序-入门-软件架构模式

介绍

用于在Apiato之上构建项目的两种最常见的体系结构是:

  • Porto:(Route Request Controller Action Task Model Transformer)。
  • MVC (Model View Controller) Apiato MVC版本与标准MVC略有不同。

    Porto是Apiato推荐的架构,用于使用Apiato构建可扩展的API。但是,它也支持使用流行的MVC架构构建API(稍作修改)。
    Apiato功能是使用Porto编写的,可以被任何架构使用。
    您将在下面看到如何构建项目的任何架构。

Porto

介绍

Porto是一个由Containers和Ship2层组成的体系结构。

该Containers层包含你的应用程序的业务逻辑代码。与Modular,DDD和插件架构相同; Apiato允许将业务逻辑分成多个名为Containers的文件夹。虽然Ship层包含的基础代码(所有你之间共享代码容器)。然而你很少会碰它。
Apiato功能本身是使用Porto Software Architectural Pattern开发的。(表示Apiato中提供的功能存在于容器中)
花费15分钟,在开始之前阅读Porto文档,是一个很好的时间投入。

容器层

在这里阅读Containers图层

删除容器(默认容器)

Apiato附带一些默认容器。所有容器都是可选的,其中一些容器包含必要的功能。

假设您不想使用Apiato的内置文档生成器功能。要删除该功能,您只需删除documentation容器即可。

要删除Container,只需删除该文件夹,然后运行composer update以删除其依赖项。

创建新的Container

选项1)使用代码生成器:
php artisan apiato:container
有关更多详细信息,请参阅代码生成器页面。
选项2)手动:

  • 在Containers文件夹中创建一个文件夹。
  • 开始创建组件并将其添加到其中。
    (船舶引擎将自动加载并自动为您注册所有内容)。
    为了使自动加载能够完美运行,您必须遵守组件的命名约定和目录。因此,您需要documentation page在创建组件时参考该组件。

    集装箱约定

  • 容器名称应该从Capital开始。使用CamelCase重命名容器。
  • 名称空间应与容器名称相同,(如果容器名称为“打印机”,则名称空间应为 App\Containers\Printer)。
  • 容器可以命名为任何东西。一个好的做法是将其命名为最重要的模型名称。 示例:如果用户故事是(用户可以创建商店,商店可以有商品),那么我们可以拥有3个容器(用户,商店和商品)。

船舶层

在这里阅读Ship层

MVC

MVC简介

由于MVC的普及,以及许多开发人员没有足够的时间来了解新架构的事实。Apiato,支持MVC架构。这与laravel MVC有97%的兼容性。
下面您将学习如何使用您之前对Laravel MVC框架的了解,在Apiato之上构建API。

标准MVC和Apiato的MVC之间的区别

Porto架构并没有取代MVC架构,而是将其扩展为好。因此,模型,视图,路由和控制器仍然存在,但在不同的地方,每个组件都有严格的职责 class type

设置我的Apiato MVC应用程序

1)首先获得Apiato的新版本

2)创建应用程序

如果你打开,app/Containers/你会看到Proto的容器列表,每个容器都为你提供一些功能。但是,无论您使用的是Porto还是MVC架构,都无需修改它们。所以暂时忘记所有这些文件夹。

我们所需要的只是创建一个名为的新文件夹Application(您的MVC应用程序,它app 是Laravel项目根目录下的文件夹的替代品)。此文件夹将保存您的所有模型,视图,路由,控制器等文件。

3)创建路由文件

在Laravel 5.6中,路径文件位于routes/项目根目录下的文件夹中。但是在Apiato MVC中,路径文件应该存在:

  • app/Containers/Application/UI/API/Routes/(对于API路由)
  • app/Containers/Application/UI/WEB/Routes/(用于WEB路由)
    建立api.phpapp/Containers/Application/UI/API/Routes/api.php“替代Laravel的routes/api.php”创建web.phpapp/Containers/Application/UI/API/Routes/web.php“替代Laravel的routes/web.php
    在这两个文件中,像在Laravel中一样创建所有端点。

    注意:您必须在路径文件中使用$router->而不是外观Route::

例:

<?php

// Use this `$router` variable
$router->get('/', function () {
    return view('welcome');
});

// DO not use the `Route` facade
Route::get('/', function () {
    return view('welcome');
});

4)创建控制器

在Laravel 5.6中,Controllers类位于该app/Http/Controllers/文件夹中。但在Apiato MVC中,Controller课程应该存在:

  • app/Containers/Application/UI/API/Controllers/Controller.php(处理API路由)必须延伸 App\Ship\Parents\Controllers\ApiController
  • app/Containers/Application/UI/WEB/Controllers/Controller.php (处理WEB路由)必须延伸 App\Ship\Parents\Controllers\WebController

5)创建模型

在Laravel 5.6中,Models类位于app/文件夹的根目录中。但是在Apiato MVC中,模型类应该存在app/Containers/Application/Models
所有型号必须extend来自App\Ship\Parents\Models\Model

请注意,UserModel应保留在User Container(app/Containers/User/Models/User.php)中,以保持所有功能无需任何修改即可运行。

6)创建视图

在Laravel 5.6中,视图文件存在于该resources/views/文件夹中。在Apiato MVC中,Views文件可以存在于同一目录或/和此容器文件夹中app/Containers/Application/UI/WEB/Views/

7)创建变形金刚

在Laravel 5.6中,变形金刚类存在于app/Transformers/文件夹中。但是在Apiato MVC中,控制器类应该存在app/Containers/Application/UI/API/Transformers/
变形金刚必须延伸App\Ship\Parents\Transformers\Transformer

8)创建服务提供商

在Laravel 5.6中,服务提供程序类位于该app/Providers/文件夹中。但是在Apiato MVC中,Controllers类可以存在app/Containers/Application/Providers/,但也可以存在于其他任何地方。

如果您希望自动加载服务提供程序(无需在config/app.php 文件中注册),请将文件重命名为 MainServiceProvider.php(完整路径app/Containers/Application/Providers/MainServiceProvider.php)。否则,您可以在任何地方创建服务提供商,并在Laravel中手动注册它们。

9)创建迁移

在Laravel 5.6中,迁移类位于database/migrations/项目根目录下的文件夹中。在Apiato MVC中,迁移类可以位于同一目录或/和此容器文件夹中 app/Containers/Application/Data/Migrations/

10)创建种子

在Laravel 5.6中,种子文件位于database/migrations/项目根目录下的文件夹中。在Apiato MVC中,种子文件可以存在于同一目录或/和此容器文件夹中app/Containers/Application/Data/Seeders/

更多课程

所有其他类类型的工作方式相同,您可以参考文档中的位置以及它们应该扩展的内容。有关详细信息,您可以随时与我们联系Slack。

如何使用Apiato功能

Apiato功能都作为Actions和Tasks类提供。

  • 每个Action类都有单个函数run,只执行一个功能。
  • 每个Task类都有单个函数run,它只能完成一个作业(业务逻辑的一小部分)。
    您可以随意使用Actions / Tasks类:
  • 使用Apiato门面和Apiato来电风格$user = \Apiato::call('Car@GetDriversAction', [$request->id]);
  • 使用带有全类名称的Apiato Facade $user = \Apiato::call(GetDriversAction::class, [$request->id]);
  • 使用具有完整类名的辅助调用函数 $user = $this->call(GetDriversAction::class, [$request->id]);
  • 使用具有Apiato调用方式的帮助程序调用功能$user = $this->call('Car@GetDriversAction', [$request->id]);
  • 没有Apiato参与使用普通的PHP $user = $action = new GetDriversAction::class; $action->run($request->id);
  • 没有Apiato参与使用普通的Laravel IoC$user = \App::make(GetDriversAction::class)->run($request->id);
    要有创意,最后这是一个有功能的课程。
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!