A
if ( ( empty($infoA) || empty($infoB) ) && ( !empty($inputA) && !empty($inputB) ) )
{
//add
}
乙
if ( ( !empty($infoA) || !empty($infoB) ) && ( empty($inputA) && empty($inputB) ) )
{
//remove
}
C
if ( ( !empty($infoA) || !empty($infoB) ) && ( ($inputA != $infoA) || ($inputB != $infoB) ) )
{
//add
}
因此,为了不重复添加,我们可以:
if (A || C)
{
//add
}
elseif(B)
{
//remove
}
您可以选择哪种更好的逻辑?
上下文: 我相信这应该是什么无关紧要。我的意思是,这是一个合乎逻辑的问题。 :■ 不知道在这里写什么...... :(
这是一种形式:一些输入来自数据库,另一些来自输入字段。 我们在这里进行一些比较。
A 上下文: 如果来自数据库的值为空,并且输入字段A和B 非空,请执行添加到数据库。
B 上下文: 如果来自数据库的值非空,并且输入字段A和B 为空,请执行从数据库中删除。< / p>
C 上下文: 如果来自数据库的值非空,并且输入字段A !等于 infoA或输入字段B 不等于数据库值infoB则, 添加到数据库。
请指教。 MEM
答案 0 :(得分:1)
几个问题:
一般来说,我会通过以下方式重构:
逻辑的唯一简化是,根据输入数据是否为空,决定调用add()或remove()仅 。这才是真正需要的。 add()和remove()函数执行自己的数据验证,以确保操作对提供的数据有效。
这种重构演示了两种重要的编程技术:
(请原谅我的PHP ......它有点生疏)
function remove($data)
{
if (empty($data))
return;
// Do remove operation
}
function add($data)
{
if (empty($data))
return;
// Do add operation
}
function process_input($input, $info)
{
if (empty($input))
remove($info);
else
add($input);
}
process_input($inputA, $infoA);
process_input($inputB, $infoB);
答案 1 :(得分:1)
我认为展开条件并使用else或else-if语句对于可读性和对代码的理解有很大帮助。虽然您提出的答案会减少代码行,但是很难理解和调试,特别是如果您将其传递给其他人。
这是我的看法
// check if to update in DB or not
$value = db_adapter::get_var($sql);
if (empty($value))
{
if (!empty($field_A) && !empty($field_B))
add($field_A, $field_B);
} else
// you can roll the following block up into a function
{
if (empty($field_A) && empty($field_B))
remove($field_A, $field_B);
else {
if ($field_A != $value)
update($field_A);
else if ($field_B != $value)
update($field_B);
}
}
其他每一个都可以汇总成一个函数;我没有,因为我无法想到在else块中调用代码块的任何逻辑(process-maybe-delete-update?determine-update-or-delete?)