软件架构模式 本文未发布 发布文章
- 介绍
- Porto
- MVC
- MVC 介绍
- 标准MVC和Apiato的MVC的区别
- 安装我的Apiato MVC应用程序
- 1) 得到新版本的Apiato
- 2) 创建应用程序
- 3) 创建路由文件
- 4) 创建控制器
- 5) 创建模型
- 6) 创建视图
- 7) 创建Transformers
- 8) 创建Service Providers
- 9) 创建数据迁移
- 10)创建数据填充
- 更多的类
- 如何使用Apiato功能
- MVC 介绍
介绍
能够在Apiato上构建应用的两个常用的软件架构是:
- Porto (路由、请求、控制器、动作、任务、模型、转换器).
- MVC ( 模型 、视图、控制器). Apiato MVC版本与标准MVC稍有不同。
Porto是Apiato推荐的使用Apiato构建可伸缩API的架构。不过,它还支持使用流行的MVC体系结构构建API(只做了一些修改)。
Apiato特性是使用Porto编写的,可以被任何架构使用。
Porto
介绍
Porto 是由 Containers 和 Ship 构成的软件架构。
Container 层主要是包含我们应用的业务逻辑代码。就像模块化、DDD和插件一样的架构;Apiato允许业务逻辑分离成多个文件夹名为称为 Containers。然而 Ship 层是基础代码。(在所有的 Containers 层共享的代买)。我们将很少碰到他们的。
Apiato的功能本身就是利用 Porto 软件架构模式开发的。(意味着Apiato的功能特性也在Containers层中)
大概花15分钟, 在开始之前请看 Porto 的文档,这是一个非常有用的一步。
Containers 层
关于 Containers 层请点击这里
删除 Container (默认 Containers)
Apiato有一些默认的 Containers 。 所有 containers 是可以配置的,其中一些是包含基本的功能。
假如我们不想使用Apiato的内置文档生成器这一功能。要删除这个功能,只需要删除 documentation
这个 container 即可。
要删除 Container ,只要简单的删除对应的文件夹并运行 composer update
来去除他所依赖的包。
创建新的 Container
Option 1) 自动生成:
php artisan apiato:container
跳转到[代码生成器]()页面了解更多
Refer to the code generator page for more details.
Option 2) 手动:
1、在 Containers 目录内创建新的目录。
2、创建组件并添加到目录里面。
(Ship层会为你自动加载和注册所有的组件)。
要让自动加载完美的工作,我们必须严格遵守组件和目录的命名约定和约束。因此,在创建组件时,需要引入组件的 documentation page
。
Container 约定
- Container 名称必须使用大写字母开头。使用驼峰法命名 Containers。
- 命空间应该与容器名称相同。(如果 container 命名是
Printer
,那么命名空间需要是App\Containers\Printer
)。 - Container 可以命名为任何东西。一个好的实践是将它命名为它最重要的模型名。
- Container MAY be named to anything however. A good practice is to name it to its most important Model name. 如果用户描述是(用户可以创建一个商店,商店可以有商品),那么我们可以有3个容器(用户、商店和商品)
Ship 层
关于 Containers 层请点击这里
MVC
MVC 介绍
由于MVC的流行,以及许多开发人员没有足够的时间来学习新的架构。Apiato支持MVC架构。它与laravel MVC兼容97%。
下面我们将了解如何使用以前对Laravel MVC框架的了解,在Apiato之上构建API。
标准MVC和Apiato的MVC的区别
The Porto 架构,并没有替代MVC架构,而是对其进行了更好的扩展, 所以模型,视图,路由和控制器仍然存在,但在不同的地方对组件的类的类型有了严格的功能要求。
安装我的Apiato MVC应用程序
1) 得到新版本的 Apiato
2) 创建应用程序
如果我们打开 app/Containers/
目录,我们将看到一些 Proto’s 的Containers,每个 container 都会为你提供一些特性。但是,我们不需要修改它们,不管我们是使用Porto还是MVC架构。现在先忘掉所有这些文件夹。
我们只需要创建一个名为 Application
的新文件夹(您的MVC应用程序,它是Laravel项目根目录下的 app
文件夹的替代方案)。此文件夹将保存所有模型、视图、路由、控制器等文件。
3) 创建路由文件
在Laravel 5.6中,route文件位于项目根目录的“routes/”文件夹中。但是在Apiato MVC中,路由文件应该存在:
app/Containers/Application/UI/API/Routes/
(API的路由)app/Containers/Application/UI/WEB/Routes/
(WEB的路由)
在 app/Containers/Application/UI/API/Routes/api.php
创建 api.php
替代 Laravel’s routes/api.php
,在 app/Containers/Application/UI/API/Routes/web.php
创建 web.php
替代 routes/web.php
在这两个文件中创建所有路由,就像在Laravel中一样。
注意: 在路由文件中,必须使用
$router->
而不是facadeRoute::
。
例如:
<?php
// 使用 `$router `变量
$router->get('/', function () {
return view('welcome');
});
// 不要使用 facade 的 `Route`
Route::get('/', function () {
return view('welcome');
});
4) 创建 Controller
在Laravel 5.6中,控制器类位于 app/Http/Controllers/
文件夹中。但是在Apiato MVC中,Controller
类应该存在:
/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 中,Models的类文件在 app/Containers/Application/Models.
目录中
所有的 Model 文件必须继承 App\Ship\Parents\Models\Model
这个类
注意
User
模型应该保持在用户容器中(app/Containers/User/Models/User.php
),以便在不做任何修改的情况下保持所有特性正常工作。
6) 创建视图
在 Laravel 5.6 中,视图文件存放于 resources/views/
目录中。在 Apiato 的 MVC 中,视图文件可以存放在相同的目录或则在 容器的文件下 app/Containers/Application/UI/WEB/Views/
7) 创建 Transformers
在 Laravel 5.6 中,Transformers 类一般存放在 app/Transformers/
目录中, 但是在 Apiato MVC中 Transformers 存放在 app/Containers/Application/UI/API/Transformers/
中 。Transformers 必须继承 App\Ship\Parents\Transformers\Transformer
。
8) Create Service Providers
在 Laravel 5.6 中, 服务提供者存放在 app/Providers/
目录中,但是在 Apiato MVC 中,Service Providers 的类存放在 app/Containers/Application/Providers/
中,当然也可以放在任何你想要放的位置。
如果希望自动加载服务提供者(不需要在 config/app.php
文件中配置),你需要将你的文件命名为 MainServiceProvider.php
(全路径 app/Containers/Application/Providers/MainServiceProvider.php
)。否则,您可以在任何地方创建服务提供者,并在Laravel中手动注册它们。
9) 创建 Migrations
在 Laravel 5.6 中 ,Migrations 类位于 database/migrations/
目录中,在 Apiato MVC 中,Migrations 可以在同样的目录下或者在 container 的 app/Containers/Application/Data/Migrations/
目录下。
10) 创建 Seeds
在 Laravel 5.6 中 ,Seeds 类位于 database/seeds/
目录中,在 Apiato MVC 中,Seeds 可以在同样的目录下或者在 container 的 app/Containers/Application/Data/Seeders/
目录下。
其他类
所有其他类类型的工作方式都是相同的,您可以参考文档,了解在哪里放置它们以及它们应该扩展什么。如需了解更多细节,请随时与我们联系Slack。
怎么使用Apiato的特性
Apiato的特性都是由 Actions 和 Tasks 类提供的
-
每个Action类都有一个函数
run
,它只执行一个功能。 -
每个任务类都有一个函数
run
,它只执行一个任务(业务逻辑的一小部分)。
你能够使用 Actions/Tasks 类在你想要的位置 -
使用具有Apiato调用者风格的Apiato Facade
$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)
;
要有创意,在一天结束的时候,这是一个有功能的类。
推荐文章: