Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: undef is undef

by moritz (Cardinal)
on Aug 29, 2012 at 08:52 UTC ( #990408=note: print w/ replies, xml ) Need Help??


in reply to undef is undef

If you often need to chase multiple levels of tabels, it means you are working on a too low level.

Add an accessor to the result class that does an in-database join over the levels, which automatically deals with the case of not having results at one level or another.


Comment on Re: undef is undef
Re^2: undef is undef
by jozef (Sexton) on Aug 29, 2012 at 09:07 UTC

    Well, even for one level it is necessary to check first. here's real world example:

    my $avatar = $usr->person->avatar;

    usr and person (extended information about user) are two tables. not every user has to have extended information and the code snipped just wants to find out if user has avatar.

    Adding accessor to usr sounds like a wise solution to hide test ifs, but it will mask the fact that avatar is accessor of person.

      Adding accessor to usr sounds like a wise solution to hide test ifs, but it will mask the fact that avatar is accessor of person.

      Hiding unneeded facts is what abstraction is all about. Why should a user of your backend model care about which table the avatar comes from? If the user doesn't have to care, it means you can change that stuff later on the in the database and only adapt your model, not your code that generates the HTML.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://990408]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2014-12-28 12:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (181 votes), past polls