шаблон не веб-приложения Python - PullRequest
1 голос
/ 07 октября 2011

В веб-дизайне я использую шаблон MVC, но иногда мне нужно создавать не веб-приложение.Это может быть какой-то анализатор или утилита с графическим интерфейсом.Какой шаблон является классическим решением для такого рода приложений?

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

MVC так же применим к не веб-приложениям. Единственное, что изменяется, это представление (элементы управления с графическим интерфейсом вместо веб-элементов управления) и типы ввода, с которыми может / должен работать контроллер.

1 голос
/ 07 октября 2011

Самый простой подход для программы служебного типа - это что-то вроде следующего Python с псевдокодом и подсказками PyGTK. Представьте себе утилиту, которая манипулирует файлами определенным образом.

class File(object):
    """This class handles various filesystem-related tasks."""

    def __init__(self, path):
        pass

    def open(self):
        pass

    def rename(self, new_name):
        pass

    def move(self, to):
        pass


class Window(gtk.Window):
    """This class is the actual GUI window with widgets."""

    def __init__(self):
        self.entry_rename = gtk.Entry()
        self.entry_move = gtk.Entry()
        self.btn_quit = gtk.Button('Quit')


class App(object):
    """This is your main app that displays the GUI and responds to signals."""

    def __init__(self):
        self.window = Window()

        # signal handlers
        self.window.connect('destroy', self.on_quit)
        self.window.entry_rename.connect('changed', self.on_rename_changed)
        self.window.entry_move.connect('changed', self.on_move_changed)
        self.window.btn_quit.connect('clicked', self.on_quit)
        # and so on...

    def on_quit(self):
        """Quit the app."""
        pass

    def on_rename_changed(self):
        """User typed something into an entry box, do something with text."""
        f = File('somefile.txt')
        f.rename(self.entry_rename.get_text())

    def on_move_changed(self):
        """User typed something into another entry box, do something with text."""
        f = File('somefile.txt')
        f.move(self.entry_move.get_text())

Вы можете думать об этом как о неформальном MVC: File это ваша модель, Window это представление, а App это контроллер.

Конечно, есть и другие, более формальные подходы. В вики большинства Python GUI есть наборы статей о возможных архитектурах. См., Например, статью wxPython вики о MVC . Существует также инфраструктура MVC для PyGTK, которая называется pygtkmvc .

У меня есть мнение, что, если вы не уверены, что вам нужен такой формальный подход, вам лучше использовать что-то вроде кода выше . Веб-фреймворки выигрывают от более формального подхода, потому что есть еще много частей для подключения: HTTP-запросы, HTML, JavaScript, SQL, бизнес-логика, логика представления, маршрутизация и т. Д. Даже для самых простых приложений. С вашим типичным приложением Python GUI вам просто нужно обрабатывать бизнес-логику и обработку событий, все на Python.

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