I'm facing with problem that in every function (with serves as service for endpoint) I need to check what is value of query parameter (mode
). I need to check it on many callables, E.g.
def create(self, arg, mode: Optional[Mode]):
if mode:
if mode == Mode.READ:
do_something()
elif mode == Mode.READ_RAW:
do_something_else()
else:
raise Error("...")
else:
...
return something
My approach to tackle this problem is to create separate class like:
class ReadFacade:
def __init__(self, read, read_raw):
self._read_raw = read_raw
self._read = read
def read(self, mode: Mode, *args, **kwargs):
if mode == Mode.READ:
response = self._read(*args, **kwargs)
elif mode == Mode.READ_RAW:
response = self._read_raw(*args, **kwargs)
else:
raise Error("...")
return response
It's intention is to overshadow all this conditionals to not repeat it in every function like above create
one.
Then I can use it in many services as follows:
class SomeService:
def __init__(self,...):
...
self._mode_handler = ReadFacade(
read=self._service.read,
read_raw=self._service.read_raw
)
def read(self, mode: Mode, *args, **kwargs):
if mode:
self._mode_handler.read(mode=mode, *args, **kwargs)
else:
...
Do I do it correctly, what I can improve? Can it be named by "facade" or it is another design pattern for that?