okaybueno/service-generator

一个用于自动为Laravel应用程序生成服务和验证器的包。

v0.0.3 2017-11-03 17:40 UTC

This package is auto-updated.

Last update: 2024-09-20 19:45:18 UTC


README

此包已被弃用,不会再收到任何更新。如果您正在使用它,请考虑迁移到另一个解决方案——或者将其分支出来,依赖您自己的版本。

服务生成器

一个用于自动为Laravel应用程序生成服务和验证器的包。

Latest Version on Packagist Software License Quality Score Total Downloads

目标

构建Web应用程序有各种各样的方法。其中一种方法被称为“六边形架构”,它并不像微服务那样新颖和热门,但它把一件事情说得非常清楚:在n层中分离关注点,这样每一层都向其上一层提供某些功能,并使用其下一层的一些功能,通过提供进入每一层中功能入口的合约或接口来实现。我们知道:这有点抽象。您可以在这里这里了解更多关于这种架构的信息。

在okay bueno,我们关注的是快速迭代数字产品,并有效地进行迭代。这也意味着优化工作方式,自动化繁琐和单调的步骤。其中一步就是创建组成我们应用程序的不同服务的过程。它总是相同的:您必须创建接口,然后是实现,在大多数情况下,您还需要创建验证器和存储库并将它们注入。之后,您必须创建服务提供者并连接一切。这些文件总是包含相同的骨架,因此此包通过CLI提供了一种交互式创建这些服务的方法。

安装

  1. 通过将其添加到您的composer.json文件或运行项目文件夹中的composer require okaybueno/service-generator来安装此包。
  2. 对于Laravel 5.5,服务提供者会自动注册,但如果您使用Laravel 5.4,则必须将提供者添加到您的config/app.php文件中:OkayBueno\ServiceGenerator\ServiceGeneratorServiceProvider::class
  3. 通过运行php artisan vendor:publish --provider="OkayBueno\ServiceGenerator\ServiceGeneratorServiceProvider"发布配置文件。
  4. 打开配置文件(config/service-generator.php),并根据您的需求进行配置。
  5. 准备就绪!

用法

此包仅提供了一个生成器命令,用于启动组成特定服务的文件。因此,它提供的唯一功能是一个会询问您几个问题的命令,并将创建和连接一切,因此您不必手动完成这些操作。

此包仅在开发期间需要,因此您可以在开发期间使用它,但在生产环境中不要使用。

示例

注意:这段文本有很强的主观性。这是我喜欢分割代码的方式,但您不一定非得这样做。

我们的应用程序将被分为3组服务:前端(由API和其他公开的方法使用)、后端(由我们的后端应用程序使用)和共享(后端和前端共享的服务或方法)。

在这些每个文件夹中,我们都有另一个关注点的分离,所以我们的用户服务将进入一个文件夹,我们的发票服务将进入另一个文件夹,以此类推...同样,这些服务中的每一个都将包含它自己的验证,由我们另一个包提供(由此包需要)。

总的来说,最终的结构将看起来像这样

+-- app
|   +-- MyApp
|       +-- Services
|            +-- Backend
|               +-- Users
|                       +-- UsersServiceInterface.php
|                       +-- UsersServiceProvider.php
|                       +-- src
|                           +-- UsersService.php
|               +-- Invoices
|                       +-- InvoicesServiceInterface.php
|                       +-- InvoicesServiceProvider.php
|                       +-- src
|                           +-- InvoicesService.php
|                       +-- Validation
|                           +-- InvoicesValidationInterface.php
|                           +-- src
|                               +-- InvoicesLaravelValidator.php
|               ...
|            +-- Frontend
|               +-- Users
|                       +-- UsersServiceInterface.php
|                       +-- UsersServiceProvider.php
|                       +-- src
|                           +-- UsersService.php
|       +-- Repositories
|           +-- UserRepositoryInterface.php
|            ...
|           +-- Eloquent
|               +-- UserRepository.php
|                ...

生成器

创建所有这些文件、将它们链接起来、注入验证器和存储库真是个麻烦。对我来说也是。那么,如果我们自动化这个过程,我们就能有更多时间做些酷的事情(比如真正写一些代码!)呢?

只需执行php artisan make:service {service},其中{service}是你想创建的组服务名称(例如,php artisan make:service Users),然后只需按照屏幕上的步骤操作即可 :)

第一步:选择组

正如你所见,config/service-generator.php中只包含一个配置参数:配置所有不同文件夹的命名空间和位置,这些文件夹可以存储服务。在交互式提示的第一步是选择服务所属的组。你只需选择屏幕上的选项即可。

For which group do you want to create the service?:
  [0] MyApp\Services\Frontend
  [1] MyApp\Services\Backend
  [2] MyApp\Services\Shared
 > 
第二步:A) 注入存储库(可选)

我们的服务通常会使用一个或多个存储库,所以你可以在这一点注入它。控制台会询问你是否要注入存储库。如果你选择“是”,那么你将被提示输入你想注入的存储库(或接口)的完整类名。如果你选择“否”(默认选择),那么你可以跳到第三步。

 Do you want to inject a repository to this service? (yes/no) [no]:
 >
第二步:B) 选择存储库(可选)

如果你选择了“是”以注入存储库,那么你必须输入你想注入的存储库的完整类名。我们建议注入一个存储库并将接口绑定到由Laravel提供的IoC容器解析的类上。

 Please specify the full interface (with namespace) for the repository that you want to inject 
 (ie: MyApp\Repositories\MyRepositoryInterface):
 >
第三步:创建和注入验证器及其接口(可选)

有时你也可能需要验证存储库中的数据,在这些情况下,你可能想要创建和注入一个验证器。如果你选择“是”(默认选择),那么将根据上面的示例结构生成一个验证器接口及其在Laravel中的实现。如果你选择“否”,则不会创建任何验证服务。

 Do you want to create and inject a validator for this service? (yes/no) [yes]:
 >
第四步:连接服务提供者

同时还会创建一个服务提供者,所以最后一步是将该服务提供者连接到我们的应用程序。要这样做,只需以添加手动创建此服务的方式添加一个普通服务提供者:)。如果你使用Laravel 5.5,可以使用自动发现(添加到你的composer.json),如果你使用Laravel 5.4(或以下版本),你可以将你的服务提供者添加到config/app.php文件中。

就这些!现在你可以在那些美妙的服务中写入所有的业务逻辑了 ;D。

限制

虽然这个包可能很有用,但它相当简单:它只是根据一些输入和一些预定义的占位符创建文件。出于同样的原因,这个包目前非常有限。

  • 当在同一范围内创建新服务时,自动生成的服务提供者永远不会修改。例如,如果你有一个名为“Users”的文件夹,但该文件夹中有两个服务(UsersServiceInterface和ResetPasswordsServiceInterface),你必须手动修改UsersServiceProvider.php文件并手动包含对新服务的绑定。
  • 服务的自动发现。尽管这是一个简单的任务,但我决定暂时跳过这个任务,所以所有服务提供者都需要手动在composer.json(>=Laravel 5.5)或app.php(<=Laravel 5.4)中连接。

更新日志

-- 尚未发布任何公共版本 --

致谢

错误和贡献

  • 发现了错误?这很好(也糟)。请通过Github上的问题让我知道。
  • 需要功能或有一些有趣的内容可以贡献?太好了!打开一个pull request。

待办事项

  • 自动化测试:尽管这个包已经经过大量测试(甚至在生产环境中),但没有设置自动化测试。

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。