noxkiwi/value

我是一个值对象库。只是包含与验证器交互的值对象集合。

dev-master 2020-07-09 00:00 UTC

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` 方法通过应用销售税将净额转换为毛额,确保计算准确可靠。

通过使用这些值对象,我们确保我们的数据在应用程序中经过验证且一致,防止了像我们过去经历的那些错误。

让我们建立联系!

如果您对合作的可能性感到兴奋,或者只是想讨论创新的想法,我很乐意听到您的意见。请不要犹豫,通过 电子邮件 联系我。

让我们一起创造一些 惊人的 东西吧!