noxkiwi / value
我是一个值对象库。只是包含与验证器交互的值对象集合。
dev-master
2020-07-09 00:00 UTC
Requires
- php: >=8.0.0
- noxkiwi/core: *
- noxkiwi/validator: *
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-24 14:08:58 UTC
README
错误开始
在2016年,在我们初创公司繁忙的初期阶段,我们犯了一个严重的错误,影响了销售经理几个月的发票提供。我们错误地将净额到毛额的税费计算多次应用于销售税,甚至在已毛额的价值上,导致重大错误。这个问题被忽略了数月,造成了很大的麻烦。因此,我们开发了两个独立的库,以确保我们所有平台上的值都是有效的。
第一个承诺是通过创建值库来确保整个项目的参数有效。然后,作为一个合乎逻辑的结论,下一步是实施一个关于数据如何验证的标准。
// The scenario is real, but this example is much simplified, of course. function netToGross(float $net): float { return $net * 1.15; }
验证器💘值
验证器
- 检查输入的完整性。
- 返回一个或多个详细信息,说明为什么一个输入有问题。
值
- 只能用有效输入构造。
- 一旦构建,输入就是不可变的,确保在运行时保持完整性。
只是一个例子
一旦构建,我们的值对象是不可变的。这种不可变性使我们能够自信地将其用作参数和返回类型,在整个应用程序中依赖其完整性。我们用我们的值对象替换了标准类型,如int、float和string,以增强数据完整性和验证。示例值对象
NetValue
GrossValue
EmailValue
IbanValue
And many more...
以下是如何使用这些值对象
class Taxes { private const SALES_TAX = 0.15; // Correcting to decimal representation for percentage /** * Converts a NetValue to a GrossValue by applying the sales tax. * * @param NetValue $netValue The net value object. * @return GrossValue The gross value object. */ public static function getGrossFromNet(NetValue $netValue): GrossValue { return new GrossValue($netValue->get() * (1 + self::SALES_TAX)); } }
在这个例子中:`NetValue` 和 `GrossValue` 都是代表净额和毛额货币价值的不可变对象。`getGrossFromNet` 方法通过应用销售税将净额转换为毛额,确保计算准确可靠。
通过使用这些值对象,我们确保我们的数据在应用程序中经过验证且一致,防止了像我们过去经历的那些错误。
让我们建立联系!
如果您对合作的可能性感到兴奋,或者只是想讨论创新的想法,我很乐意听到您的意见。请不要犹豫,通过 电子邮件 联系我。
让我们一起创造一些 惊人的 东西吧!