一种返回bool但加载多个对象的方法

mrb*_*lah 2 c# java oop coding-style

我有一个返回bool的简单方法,但它在内部加载各种对象.

我为每个检查null,但它变得非常难看.

有没有更好的办法?

public bool SomeTest(int id1)
{
   bool result = false;

   User user = userDao.GetById(id1);

   if(user != null)
   {
      Blah blah = blahDao.GetById(user.BlahId);


     if(blah != null)
     {
         FooBar fb = fbDao.GetById(blah.FooBarId);

         if(fb != null)
         {
           // you_get_the_idea!

         }


     }
   }


   return result;
}
Run Code Online (Sandbox Code Playgroud)

是否有一种模式可以使这更像是内联而不是嵌套if?

Jon*_*eet 15

是否需要做除检查实体是否存在以外的任何事情?我不会假设.

第一步:忽略"一个退出点"规则并减少嵌套:

public bool SomeTest(int id1)
{
   User user = userDao.GetById(id1);    
   if (user == null)
   {
      return false;
   }

   Blah blah = blahDao.GetById(user.BlahId);
   if (blah == null)
   {
       return false;
   }

   FooBar fb = fbDao.GetById(blah.FooBarId);
   if (fb == null)
   {
       return false;
   }

   return true;
}
Run Code Online (Sandbox Code Playgroud)

接下来的内容可能是特定于语言的......您使用的是哪种语言,以及该平台的哪个版本?你能改变你的DAO吗?C#具有更多的语言灵活性(lambda表达式,空合并运算符,类似的东西),在这种情况下可能很方便.

  • '第一步:忽略"一个退出点"规则并减少嵌套'我看到的一些最难以理解的代码是在一个退出点规则的名称中完成的:) (5认同)

Lee*_*Lee 5

假设你无法恢复,只要你得到一个null就可以返回:

User user = UserDAO.GetById(id1);

if(user == null) return false;

Blah blah = blahDao.GetById(user.BlahId);

if(blah == null) return false;
Run Code Online (Sandbox Code Playgroud)

您可能还想查看Null对象模式