LINUX.ORG.RU

правильно проектирование (backend, GUI), Python


0

0

1. Программа для работы с данными. Хочется написать один класс работы
с данными, скажем Data (данные получает по SOAP, но это не важно). Возможно в будущем создание разных GUI. Как поступить правильно:
 а) наследовать Data и создавать различные методы Show()
 б) поручить отображение данных классу GUI.

2. В одном объекте Data содержится несколько записей, скажем Entry.
Я так понимаю, что надо создать класс Entry вида:

class Entry:
  def __init__(self, field1, field2, ...):
    self.field1=field1
    self.field2=field2
    ...
 
в классе Data создать __setitem__ и __getitem__ (кажется так называются методы для чтения и изменения [".."])

class Data:
  ...
  def __setitem__(self,key,item):
    self.data[key]=item
    ...
  def __getitem__(self,key):
    return self.data[key]
  ...

Стоит ли делать так, чтобы при изменении одного Entry сразу перерисовывалось отображение (то есть видимо наследовать Data и перегружать Show, а в __setitem__ добавить вызов self.Show()) или это отдать на откуп GUI?
★★★★

> а) наследовать Data и создавать различные методы Show() > б) поручить отображение данных классу GUI.

Лучше создать отдельный класс GUI. Для разных GUI - разные классы с одинаковыми именами методов (и наборами параметров в каждом, естественно). В Data - ссылка на экземпляр GUI.

> в классе Data создать __setitem__ и __getitem__ (кажется так называются методы для чтения и изменения [".."])

Если нужен "красивый" синтаксис, то да, но можно просто сделать методы setitem(key, data) и getitem(key)->data. Более явно, меньше сбивает с толку.

> Стоит ли делать так, чтобы при изменении одного Entry сразу перерисовывалось отображение (то есть видимо наследовать Data и перегружать Show, а в __setitem__ добавить вызов self.Show()) или это отдать на откуп GUI?

Наверное, лучше, чтобы Data дёргал GUI - Data знает, когда изменились данные, GUI знает, как рисовать.

DKorolkov
()
Ответ на: комментарий от DKorolkov

По моему, Data вообще не должен о существовании GUI, для обновления данных можно посылать вигнал сигнал(callback, DBus ...). Если данные, которые приходят по Soap не нужно обрабатывать, то можно даже не замариваться с Data.

krum
()

Для начала почитай http://en.wikipedia.org/wiki/MVC - там ответы
практически на все твои вопросы. Что касается вот этого:

> Стоит ли делать так, чтобы при изменении одного Entry сразу
> перерисовывалось отображение (то есть видимо наследовать Data и
> перегружать Show, а в __setitem__ добавить вызов self.Show()) или это
> отдать на откуп GUI?

Глупо. Просто используй callbacks - при изменении данных, пусть оно
сообщает об этом всем желающим (т.е. тем, кто зарегистрировал
соответствующий event handler). В MVC оный handler будет, разумеется, в
controller.

int19h ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.