我需要哪种模式

时间:2019-02-20 14:17:31

标签: php design-patterns dependencies factory-pattern

我有一个可以生成代码的Sequence类。

$sequence = new Sequence();

$sequence->startsWith('FACT')
    ->followedBy('-')
    ->followedBy(new NumberPart(4, 'Year')) //The four indicates that the number will be 4 digits long. Zero-padded if needed
    ->followedBy((new NumberPart(4, 'InvoiceNo'))) //The four indicates that the number will be 4 digits long. Zero-padded if needed
    ->startingAt('FACT-20170020');

$sequence->checkUniqueness()->inDatabase('orders', 'order_number'); //Does not exist yet

$nextValue = $sequence->next(); //FACT-20170021

序列类可以完美地工作。我现在正尝试使用checkUniqueness方法扩展它。但是我不确定如何构建它。因为我也许还想使用这种方法:

$sequence->checkUniqueness()->inArray(['FACT-20170020', 'FACT-20170021']);

当下一个数字在任一数据库数组中都不唯一时,我希望它引发异常。

这是我正在尝试的:

checkUniqueness方法返回一个工厂(不确定这是否是正确的模式)。工厂同时具有inArray和inDatabase方法。分别可以制作一个inArrayUniquenessChecker和一个inDatabaseUniqueness检查器实例。两者都实现了称为UniquenessCheckerInterface的接口,该接口定义了函数签名:

public function isUnique(string $value): bool;

但是与此有关的问题是我不希望它返回例如inDatabaseUniqueness类实例。我希望inArray和inDatabase方法可以将其结果提供给Sequence实例。这样,在下一个-> next()调用中进行检查。

我该怎么做。这是解决此问题的正确心态/模式吗?

0 个答案:

没有答案