okaybueno / service-generator
一个用于自动为Laravel应用程序生成服务和验证器的包。
Requires
- php: >=7.0
- illuminate/console: 5.*
- illuminate/filesystem: 5.*
- illuminate/support: 5.*
- okaybueno/validation: 1.*
This package is auto-updated.
Last update: 2024-09-20 19:45:18 UTC
README
此包已被弃用,不会再收到任何更新。如果您正在使用它,请考虑迁移到另一个解决方案——或者将其分支出来,依赖您自己的版本。
服务生成器
一个用于自动为Laravel应用程序生成服务和验证器的包。
目标
构建Web应用程序有各种各样的方法。其中一种方法被称为“六边形架构”,它并不像微服务那样新颖和热门,但它把一件事情说得非常清楚:在n层中分离关注点,这样每一层都向其上一层提供某些功能,并使用其下一层的一些功能,通过提供进入每一层中功能入口的合约或接口来实现。我们知道:这有点抽象。您可以在这里和这里了解更多关于这种架构的信息。
在okay bueno,我们关注的是快速迭代数字产品,并有效地进行迭代。这也意味着优化工作方式,自动化繁琐和单调的步骤。其中一步就是创建组成我们应用程序的不同服务的过程。它总是相同的:您必须创建接口,然后是实现,在大多数情况下,您还需要创建验证器和存储库并将它们注入。之后,您必须创建服务提供者并连接一切。这些文件总是包含相同的骨架,因此此包通过CLI提供了一种交互式创建这些服务的方法。
安装
- 通过将其添加到您的
composer.json
文件或运行项目文件夹中的composer require okaybueno/service-generator
来安装此包。 - 对于Laravel 5.5,服务提供者会自动注册,但如果您使用Laravel 5.4,则必须将提供者添加到您的
config/app.php
文件中:OkayBueno\ServiceGenerator\ServiceGeneratorServiceProvider::class
- 通过运行
php artisan vendor:publish --provider="OkayBueno\ServiceGenerator\ServiceGeneratorServiceProvider"
发布配置文件。 - 打开配置文件(
config/service-generator.php
),并根据您的需求进行配置。 - 准备就绪!
用法
此包仅提供了一个生成器命令,用于启动组成特定服务的文件。因此,它提供的唯一功能是一个会询问您几个问题的命令,并将创建和连接一切,因此您不必手动完成这些操作。
此包仅在开发期间需要,因此您可以在开发期间使用它,但在生产环境中不要使用。
示例
注意:这段文本有很强的主观性。这是我喜欢分割代码的方式,但您不一定非得这样做。
我们的应用程序将被分为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)。请参阅许可证文件以获取更多信息。