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?
create. Like delegating this checking work somewhere else to write it only once and then use it in many places. – rozumir Apr 11 '22 at 10:20