这是太多行和太多嵌套块吗?

Shi*_*bby 1 php netbeans code-hinting

我有一个功能,可以从数据库中加载事物列表并将其放入选择列表中。函数如下:(伪代码)

 protected function Foo() 
 {
    try {

        get pdo instance
        prepare statement

        if (pdo query executes) 
        {

            while (row = fetched rows) 
            {
                do stuff with row
            }
        } 
     } 
     catch (PDOException $ex) 
     {
         do error stuff here
     }        
 }
Run Code Online (Sandbox Code Playgroud)

NetBeans提供了一条代码提示,提示它有太多行和太多嵌套块。我个人认为该功能应该可以接受。我还觉得将逻辑分解为较小的功能有点麻烦,但是为什么netbeans对我撒谎:)?

所以我的问题如下:

这是不好的逻辑还是我应该继续前进?我欢迎任何有关如何重新设计功能以适合NetBean约束的建议。

编辑:

我不会回答自己的问题,但是在这种情况下,不需要一个嵌套块。从具有try / catch块的单例类中检索pdo。我不需要在此函数中再次重复它,因为已经捕获了异常。

编辑2:

删除尝试捕获块就像抢劫彼得付给保罗一样。因此,如果在创建pdo实例时引发了异常,它不会停止执行。因此,我们尝试在未正确初始化的PDO对象上调用prepare语句。这迫使我们在prepare调用之前进行另一个测试,从而仅返回原始功能的重做。

根据我的经验,这意味着我的逻辑已经基本确立。如果我有话要说的话,我将回顾一下我的设计,然后holla。

再次感谢大家

Sar*_*raz 5

您的代码是好的。NetBeans所建议的并不一定是您应该遵循的规则,如果您使用了PHPStorm之类的其他编辑器,甚至也不必担心(在PHPStorm中,您可以将编码样式设置为遵循PSR 1/2)。

您至少可以使用称为guard子句的方法消除一个嵌套:

protected function Foo() 
{
    try {
        get pdo instance
        prepare statement

        if (! pdo query executes) return; 

        while (row = fetched rows) 
        {
            do stuff with row
        }

     } 
     catch (PDOException $ex) 
     {
         do error stuff here
     }        
}
Run Code Online (Sandbox Code Playgroud)

我看到人们有不同的偏好,因为没有硬性规定。例如,安东尼·费拉拉(Anthony Ferrara)个人认为他不应超出四个嵌套层次,而我个人认为四个层次太多。

重点是您应尽可能减少嵌套和行数。当您的方法太大(有时称为God方法)时,表示您做错了。

您可能还想看一下威廉·杜兰德(William Durand)撰写的这篇不错的文章,其中他讨论了杰夫·贝(Jeff Bay)在他的《ThoughtWorks Anthology》一书中提出的一些建议(实际上是9个)

对象健美操

另外,PHP Coding Standards Fixer是您的朋友。

所以:

  • 您当前的代码非常好
  • 创建您的个人喜好,并在那里淡化细纹的嵌套和数量的可能