codehaus


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Dispatch table of methods with various return value types


On 17/11/2020 22:01, Loris Bennett wrote:
> Hi,
> 
> I have a method for manipulating the membership of groups such as:
> 
>      def execute(self, operation, users, group):
>          """
>          Perform the given operation on the users with respect to the
>          group
>          """
> 
>          action = {
>              'get': self.get,
>              'add': self.add,
>              'delete': self.delete,
>          }
> 
>          return action.get(operation)(users, group)
> 
> The 'get' action would return, say, a dict of users attribute, whereas
> the 'add/delete' actions would return, say, nothing, and all actions
> could raise an exception if something goes wrong.
> 
> The method which calls 'execute' has to print something to the terminal,
> such as the attributes in the case of 'get' and 'OK' in the cases of
> 'add/delete' (assuming no exception occurred).
> 
> Is there a canonical way of dealing with a method which returns different
> types of data, or should I just make all actions return the same data
> structure so that I can generate a generic response?


Is the problem caused by coding the first step before thinking of the 
overall task? Try diagramming or pseudo-coding the complete solution 
(with multiple approaches), ie the operations AND the printing and 
exception-handling.

Might it be more appropriate to complete not only the get but also its 
reporting, as a unit. Similarly the add and whatever happens after that; 
and the delete, likewise.

Otherwise the code must first decide which action-handler, and later, 
which result-handler - but aren't they effectively the same decision? 
Thus, is the reporting integral to the get (even if they are in separate 
routines)?
-- 
Regards =dn