On 11/24/2015 03:15 PM, Josef Reidinger wrote:
> On Tue, 24 Nov 2015 14:45:45 +0100
> Stefan Hundhammer <[email protected]> wrote:
> 
>> [...]
> 
> Well, in OOP is also one more approach called NullObject pattern, which
> is create kind if partition table, that in represent no partition
> table. Let me below show how it will behave. ( and yes, I know it is a
> bit controversial pattern -
> https://en.wikipedia.org/wiki/Null_Object_pattern

Indeed, while reading HuHa's mail, the NullObject pattern was the first
thing that came to my mind as well (it looks like a tailored example to
explain the pattern). Fortunately, Josef already explained it much
better that I would have done.

> [...]
>> [...]
>>
>> OTOH if there would be more checks that might fail (such as the
>> 'if disk && disk.partition_table && disk.partition_table.gpt?' check 
>> above), that one 'begin..rescue' block would handle them all, and the 
>> control flow remains clear and straightforward.
>>
>> And that's the beauty of it.
> 
> Well, I am not sure as you should use more specialized exception
> catcher, otherwise you can catch also other problem, that should go
> more top level, so in the end, you might want to rescue from three
> kinds of exception like 
> 
> rescue NoPartitionTable, NoDisk, NotGpt => e
> 
> which is not so beauty.

Well, to be fair, you could use Inheritance like
  class LibStorage::NotFound < Exception; end
  class LibStorage::NoPartitionTable < LibStorage::NotFound; end
  class LibStorage::NoDisk < LibStorage::NotFound; end
and so on, so you only need to catch
  rescue LibStorage::NotFound => e

Still, I prefer the NullObject pattern instead of abusing the exceptions
system (which, as a side note, used to be quite slow in the first
versions of Ruby 2, not sure now).

> [...]
> 
> Still I think for common situation that can easily happen like disk
> without partitions we should consider NullPattern approach, which *for
> me* is in this situation better approach.

+1

Cheers.
-- 
Ancor González Sosa
YaST Team at SUSE Linux GmbH
-- 
To unsubscribe, e-mail: [email protected]
To contact the owner, e-mail: [email protected]

Reply via email to