Это плохая идея, чтобы открыть диалоговое окно в библиотеке классов? - PullRequest
2 голосов
/ 01 февраля 2010

у нас есть какая-то библиотека классов, которая будет открывать диалоговое окно, это плохая идея для этого?

Ответы [ 9 ]

11 голосов
/ 01 февраля 2010

Библиотеки классов предназначены для консолидации бизнес-логики и уменьшения дублирования кода.Диалоги должны отображаться на вашем уровне представления, где он может решить, как лучше это сделать.

Например, если ваша библиотека классов используется в приложении winform, этот диалог будет отличаться от диалога, отображаемого на веб-сайте..

8 голосов
/ 01 февраля 2010

Да, это плохая идея. Что произойдет, если служба Windows будет использовать вашу библиотеку?

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

При написании библиотеки классов, которая будет использоваться во многих различных сценариях, вам не нужен блокирующий вызов, требующий вмешательства человека.

Вы можете выяснить, является ли сеанс интерактивным или нет, и сделать выбор при создании всплывающего окна, но в лучшем случае это хак.

7 голосов
/ 01 февраля 2010

Ваша библиотека должна связываться с как можно меньшим количеством других библиотек для достижения намеченной цели. Если ваша библиотека не является библиотекой графического интерфейса, не используйте всплывающие диалоги.

3 голосов
/ 01 февраля 2010

Если это библиотека классов для отображения диалогов, тогда да. Для любого другого вида библиотеки классов тогда нет.

правильная вещь для библиотеки - это принимать обратные вызовы, такие как "getInformationFromUser" или "showError" или что-то еще. Затем вызывающий библиотеки решает, как это сделать. Или для сообщения об ошибках следует вызвать исключение или вернуть код ошибки.

Чтобы библиотека показывала само диалоговое окно, она должна сделать большое количество предположений - что библиотека используется в программе с графическим интерфейсом, какая структура графического интерфейса используется, какой язык понимает пользователь и т. Д. неправильно, неправильно.

2 голосов
/ 01 февраля 2010

Вот что я думаю: Это зависит от основной цели вашей библиотеки классов, если это модуль пользовательского интерфейса, который предоставляет некоторые функции пользовательского интерфейса, тогда должно быть несколько диалогов и форм и т. Д., Но если это библиотека, которая должна предоставлять некоторые услуги (бизнес или доступ к данным) для в других частях вашего приложения в вашей библиотеке не должно быть элемента пользовательского интерфейса.

2 голосов
/ 01 февраля 2010

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

Но суровая реальность такова, что библиотеки будут становиться все более и более универсальными, и они понадобятся вам во всех видах приложений, не только на основе графического интерфейса. Так что вы могли бы также планировать заранее и запретить диалоги в библиотеке и просто обработать сообщение об ошибке другим способом.

2 голосов
/ 01 февраля 2010

Я бы сказал, плохая идея.Для примера невизуального библиотечного класса взгляните на QFile .При использовании он возвращает статус ошибки обратно как возвращаемое значение (например, if (! File.open (mode ...))), а затем сохраняет последнюю ошибку как в виде дружественного к приложению перечисления (http://doc.trolltech.com/4.6/qfile.html#error), так и в видеудобочитаемая строка ошибки (http://doc.trolltech.com/4.6/qiodevice.html#errorString), которую ваше приложение может использовать для простого всплывающего диалогового окна, печати его на консоли или добавления в журнал и т. д.

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

2 голосов
/ 01 февраля 2010

Я думаю, что это плохая идея. Но в некоторых случаях вы можете захотеть сделать логику пользовательского интерфейса многоразовой. В этом случае попробуйте вытащить код взаимодействия с пользователем в отдельной библиотеке.

2 голосов
/ 01 февраля 2010

Это очень многое зависит.Если эта библиотека классов содержит много других классов GUI, то возможно.Если эта библиотека содержит доменные объекты, то это звучит как плохая идея.

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