7.4. Façade¶
EN: Façade
PL: Fasada
Type: object
7.4.1. Pattern¶
Provide simple interface to complex system

7.4.2. Problem¶
Every time we want to send a push notification to users, we need to follow all steps:
connect() -> Connection
authenticate(appid, key) -> AuthToken
send(AuthToken, message, target)
conn.disconnect()

from dataclasses import dataclass
@dataclass
class Message:
content: str
class Connection():
def disconnect(self) -> None:
pass
class AuthToken:
pass
class NotificationServer:
"""
connect() -> Connection
authenticate(appid, key) -> AuthToken
send(AuthToken, message, target)
conn.disconnect()
"""
def connect(self, ip_address: str) -> Connection:
return Connection()
def authenticate(self, appid: str, key: str) -> AuthToken:
return AuthToken()
def send(self, authtoken: AuthToken, message: Message, target: str):
print('Sending a message')
if __name__ == '__main__':
server = NotificationServer()
connection = server.connect('127.0.0.1')
authtoken = server.authenticate('AppId', 'Key')
message = Message('Hello World')
server.send(authtoken, message, '192.168.0.1')
connection.disconnect()
7.4.3. Solution¶

from dataclasses import dataclass
@dataclass
class Message:
content: str
class Connection():
def disconnect(self) -> None:
pass
class AuthToken:
pass
class NotificationService:
def send(self, message: str, target: str) -> None:
server = NotificationServer()
connection = server.connect('127.0.0.1')
authtoken = server.authenticate('AppId', 'Key')
server.send(authtoken, Message(message), target)
connection.disconnect()
class NotificationServer:
"""
connect() -> Connection
authenticate(appid, key) -> AuthToken
send(AuthToken, message, target)
conn.disconnect()
"""
def connect(self, ip_address: str) -> Connection:
return Connection()
def authenticate(self, appid: str, key: str) -> AuthToken:
return AuthToken()
def send(self, authtoken: AuthToken, message: Message, target: str):
print('Sending a message')
if __name__ == '__main__':
service = NotificationService()
service.send('Hello World', '192.168.0.1')
7.4.4. Assignments¶
Clean datetime
Split name into firstname and lastname
Example from
@staticmethod
chapter