andreygordin / tanuki-currency
Requires
- php: ^7.2
Requires (Dev)
- overtrue/phplint: ^2.0
- phpunit/phpunit: ^8.5
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^3.12
This package is auto-updated.
Last update: 2024-09-19 07:05:24 UTC
README
需要做什么
有一个大型系统,为公司带来显著收入,因此对其代码质量有很高的要求。
该系统还使用汇率。
获取汇率的逻辑如下。调用代码可以从缓存、数据库和通过 http 的外部来源获取它们。如果没有在缓存中找到汇率,则需要检查数据库,如果数据库中有,则将其放入缓存。如果数据库中没有,则需要检查外部来源,并将其放入数据库和缓存中。
需要实现这个逻辑。预计它将在多个地方使用。
可能存在条件中的不准确之处,某些行为未指定等。需要自行决定在每种情况下应该做什么,并明确标注出来——无论是通过注释还是通过类似README的文件。在同一文件中,说明如果时间更充裕,你会做什么;你的考虑是什么,整体代码应该如何呈现,你到底在追求什么。
不需要实现发送请求、在数据库和缓存中存储数据的功能,只需要做占位符即可。换句话说,不需要实现复杂的技术细节。更重要的是如何分解领域,你的类是如何设计的,逻辑放在了哪里。尽管如此,代码的质量应该看起来像是最终版本,可以提交审查。
如何启动
通过 Composer 安装
composer require andreygordin/tanuki-currency
使用示例
use TanukiCurrency\Entity\Currency; use TanukiCurrency\Repository\CacheRepository; use TanukiCurrency\Repository\ChainRepository; use TanukiCurrency\Repository\DbRepository; use TanukiCurrency\Repository\HttpRepository; $chainRepository = new ChainRepository( new CacheRepository(), new DbRepository(), new HttpRepository() ); $currencyState = $chainRepository->find(new Currency('RUB')); echo $currencyState->rate()->value();
如何检查
要使用代码检查器检查代码,请从代码目录中运行
composer lint
要使用 phpcs 检查代码
composer cs-check
要使用 psalm 检查代码
composer psalm
要运行测试
composer test
还可以做什么
-
目前,三个内部存储库的类返回虚假数据,实际上没有保存任何内容。下一步是为每个存储库设置特定类型的存储。对于缓存,存在 PSR-6:可以将
CacheRepository依赖于Psr\Cache\CacheItemPoolInterface并使用此类客户端来获取和保存数据。对于 HTTP,存在 PSR-17 和 PSR-18:在HttpRepository类中,可以将依赖项设置为Psr\Http\Message\RequestFactoryInterface和Psr\Http\Client\ClientInterface。对于数据库,PSR 没有提供任何内容,这里可以编写自己的接口。 -
目前,在请求十个不同货币的数据时,将对缓存、数据库和外部 HTTP 源进行十个单独的请求。有理由为整个货币集合请求信息。
-
当前的货币代码仅按字符数量进行验证。应该加载所有现有货币的列表,并检查以确保不能请求一个三字母的、不存在的货币。