Название: Помогите написать красивый код Отправлено: Swa от Декабрь 12, 2012, 09:25 Всем привет.
Вопрос больше на тему красоты кода. Есть сущность "документ", содержащая данные. Документ может быть загружен с диска и сохранен: Код: class Document : public QObject { Как в таком случае лучше поступить? Есть вариант сделать так: Код: Document::Load(QString) { Убирать статик с Load не хочется потому что, как мне кажется, метод Load должен создавать новый документ, а не изменять существующий. Кто что посоветует? Название: Re: Помогите написать красивый код Отправлено: Bepec от Декабрь 12, 2012, 09:49 Извиняюсь заранее за резкость.
А захрена он вам статический? Трудно создать конструктор с именем файла? И да, простое решение вашей проблемы - Цитировать но тогда есть шанс, что загрузка выполнится раньше, чем основной поток успеет подписаться на сигнал об окончании загрузки. . Подписываться на сигнал РАНЬШЕ чем запускать процесс обработки. Название: Re: Помогите написать красивый код Отправлено: Swa от Декабрь 12, 2012, 10:04 Конструктор с именем файла - это, по-моему, неочевидное поведение: подразумевается, что будет создан новый объект, а будет выполняться загрузка из файла.
Подписываться на сигнал РАНЬШЕ чем запускать процесс обработки. И как это сделать (на примере второго куска кода)? Название: Re: Помогите написать красивый код Отправлено: Bepec от Декабрь 12, 2012, 10:25 Сделать у Document сигналы с прогрессом.
Сделать connect к новосозданному документу. Запустить процесс загрузки. PS ваши рассуждения по поводу создан, а будет выполнять загрузку мне ясны. Но что вам мешает сделать обычную функцию load? Название: Re: Помогите написать красивый код Отправлено: Swa от Декабрь 12, 2012, 10:55 Тогда будет возможность выполнить загрузку у уже измененного документа и все изменения потеряются (этот момент можно списать на проблемы потребителя, мол, не сохранили, так ссзб).
Нужно будет писать дополнительный метод очистки старых данных и вызывать его перед загрузкой. Также если во время загрузки произошла ошибка, то документ будет в каком-то непонятном состоянии, придется вводить дополнительный флаг статуса документа и добавлять проверки. Как-то это геморройно. Название: Re: Помогите написать красивый код Отправлено: Bepec от Декабрь 12, 2012, 12:09 Возьми любой, вообще любой редактор. При открытии документа сверяется название текущего и открываемого. Если совпадают - но реакшен. Если разные, то смотрим - имелись ли изменения (флаг, али сверка фулл контекста). Если не было, затираем текущий и открываем выбранный пользователем. Если были изменения, то спрашиваем - сохранять или игнорить. Если сохранить - сохраняем с обработкой ошибок сохранения. Если игнорить - затираем текущий и открываем выбранный пользователем. Что мб проще? :)
PS если уж ты начал делать такие вещи, то понимай что простым - да/нет тут не обойдёшься. Название: Re: Помогите написать красивый код Отправлено: Swa от Декабрь 12, 2012, 12:59 Понятно. Просто я изначально начал делать так, что для каждого файла с диска - свой объект типа Document, поэтому этих затруднений и не возникало.
Спасибо за советы. |