Skip to Content
Python Cookbook
book

Python Cookbook

by Alex Martelli, David Ascher
July 2002
Intermediate to advanced
608 pages
15h 46m
English
O'Reilly Media, Inc.
Content preview from Python Cookbook

Using Publish/Subscribe Broadcasting to Loosen the Coupling Between GUI and Business Logic Systems

Credit: Jimmy Retzlaff

Problem

You need to loosen the coupling between two subsystems, since each is often changed independently. Typically, the two subsystems are the GUI and business-logic subsystems of an application.

Solution

Tightly coupling application-logic and presentation subsystems is a bad idea. Publish/subscribe is a good pattern to use for loosening the degree of coupling between such subsystems. The following broadcaster module (broadcaster.py) essentially implements a multiplexed function call in which the caller does not need to know the interface of the called functions:

# broadcaster.py _ _all_ _ = ['Register', 'Broadcast', 'CurrentSource', 'CurrentTitle', 'CurrentData'] listeners = {} currentSources = [] currentTitles = [] currentData = [] def Register(listener, arguments=( ), source=None, title=None): if not listeners.has_key((source, title)): listeners[(source, title)] = [] listeners[(source, title)].append((listener, arguments)) def Broadcast(source, title, data={}): currentSources.append(source) currentTitles.append(title) currentData.append(data) listenerList = listeners.get((source, title), [])[:] if source != None: listenerList += listeners.get((None, title), []) if title != None: listenerList += listeners.get((source, None), []) for listener, arguments in listenerList: apply(listener, arguments) currentSources.pop( ) currentTitles.pop( ) currentData.pop( ) def ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Modern Python Cookbook - Second Edition

Modern Python Cookbook - Second Edition

Steven F. Lott
Python Cookbook, 3rd Edition

Python Cookbook, 3rd Edition

David Beazley, Brian K. Jones

Publisher Resources

ISBN: 0596001673Supplemental ContentCatalog PageErrata