Монокль использует плохой пример для событийно-ориентированного программирования? - PullRequest
1 голос
/ 22 мая 2011

https://github.com/saucelabs/monocle

Следующий пример приведен в качестве примера стандартного программирования, управляемого событиями:

def get_cmd(conn):
    conn.read_until("\n", callback=handle_cmd)

def handle_cmd(conn, cmd):
    if cmd.type == "get-address":
        # keep track of the conn so we can write the response back!
        def callback(result):
            handle_user_query_result(conn, result)
        db.query(cmd.username, callback)
    else:
        conn.write("unknown command")

def handle_user_query_result(conn, user):
    conn.write(user.address)

Хотя я не понимаю, зачем требовалось замыкание.«Отслеживание соединения» противоречит принципам работы первой функции «get_cmd».Кроме того, разве управляемые событиями рамки обычно не позволяют передавать параметры вокруг?

Я предполагаю, что это был бы более правдоподобный пример:

def get_cmd(conn):
    conn.read_until("\n", callback=handle_cmd)

def handle_cmd(conn, cmd):
    if cmd.type == "get-address":
        db.query(cmd.username, callback=handle_user_query_result, params=conn)
    else:
        conn.write("unknown command")

def handle_user_query_result(result, params):
    user = result
    conn = params
    conn.write(user.address)

Я ошибаюсь?

1 Ответ

2 голосов
/ 22 мая 2011

Я бы сказал, что это плохой пример, потому что он не показывает, насколько плохим может быть программирование событий на основе обратного вызова. Закрытие не обязательно, но оно (предположительно) используется для логической организации вещей, что облегчает чтение и анализ кода. Весьма распространено писать свой обратный вызов как закрытие. Весь смысл этого примера состоит в том, чтобы проиллюстрировать, как избегание обратных вызовов может сделать код более кратким, возможно, более легким для чтения / записи / рассуждений. Лично я не фанат программирования, основанного на обратном вызове, поскольку недавно использовал twisted и node.js . Иди, напиши приложение с любым из них, и тогда ты оценишь подход monocle (или нет, некоторые люди предпочитают подход, основанный на обратном вызове).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...