I'm wondering about best practice here. Is it good practice for a factory method to return null if it can't create anything? Here's an example:
ICommand command = CommandFactory.CreateCommand(args); if (command != null) command.Execute(); else // do something else if there is no command
An alternative would be to return a NullCommand
or something, I guess, but what is best practice?
Null reference as a product of a factory is incompatible with the concept of a factory as an object where something is produced.
Returning Null is Bad Practice The FirstOrDefault method silently returns null if no order is found in the database. There are a couple of problems here: Callers of GetOrder method must implement null reference checking to avoid getting a NullReferenceException when accessing Order class members.
Returning null is usually the best idea if you intend to indicate that no data is available. An empty object implies data has been returned, whereas returning null clearly indicates that nothing has been returned.
A function that returns a null reference achieves neither goal. Returning null is like throwing a time bomb into the software. Other code must a guard against null with if and else statements.
I think it's potentially reasonable for a factory method to return null in some situations, but not if it's a method called CreateCommand
. If it were GetCommand
or FetchCommand
, that might be okay... but a Create
method should throw an exception on failure, I would suggest.
Whether you really want it to return null
in this situation depends on the bigger picture, of course. (Is there a reasonable null object implementation you could return instead, for example?)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With