Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6085
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Что вы думаете о разработке для командной строки в первую очередь?
Каково Ваше мнение о разработке для командной строки сначала, а затем добавить GUI на постфактум, просто вызвав методы командной строки?
напр..
Ж:\ Тодо AddTask "meeting with John, re: login peer review" "John's office" "2008-08-22" "14:00"
загружает todo.exe и вызывает функцию с именем AddTask , которая выполняет некоторую проверку и запускает собрание в базе данных.
В конце концов вы добавляете экран для этого:
============================================================ Event: [meeting with John, re: login peer review] Location: [John's office] Date: [Fri. Aug. 22, 2008] Time: [ 2:00 PM] [Clear] [Submit] ============================================================
Когда вы нажимаете кнопку Отправить, он вызывает ту же самую функцию AddTask.
Считается ли это так:
- хороший способ кодирования
- только для новичков
- ужасно!.
Дополнение :
Я замечаю тенденцию здесь для "shared library called by both the GUI and CLI executables." есть ли какая-то убедительная причина, почему они должны быть разделены, кроме, возможно, размера самих двоичных файлов?
Почему бы просто не вызвать один и тот же исполняемый файл разными способами:
"todo /G"когда вам нужен полноценный графический интерфейс"todo /I"для интерактивного приглашения в пределахtodo.exe(сценарии и т. д)- обычный старый
"todo <function>", когда вы просто хотите сделать что-то одно и покончить с этим.
Приложение 2 :
Было упомянуто, что "так, как [я] описал вещи, вам [нужно] будет порождать исполняемый файл каждый раз, когда GUI нужно что-то сделать."
Опять же, это не входило в мои намерения. Когда я упомянул, что пример GUI вызывал "ту же самую функцию AddTask ", я не имел в виду, что GUI вызывал программу командной строки каждый раз. Я согласен, что это было бы очень неприятно. Я предполагал (см. Первое добавление), что все это будет храниться в одном исполняемом файле, поскольку это был крошечный пример, но я не думаю, что моя формулировка обязательно исключала общую библиотеку.
Кроме того, я хотел бы поблагодарить всех вас за Ваш вклад. Это то, что постоянно всплывает у меня в голове, и я ценю мудрость вашего опыта.
Я бы пошел на создание библиотеки с приложением командной строки, которое ссылается на нее. После этого вы можете создать GUI, который ссылается на ту же библиотеку. Вызов командной строки из GUI порождает внешние процессы для каждой команды и является более разрушительным для OS.
Кроме того, с помощью библиотеки вы можете легко выполнять модульные тесты для функциональности.
Но даже если ваш функциональный код отделен от интерпретатора командной строки, вы можете просто повторно использовать исходный код для GUI, не имея двух видов сразу для выполнения операции.
Поместите общую функциональность в библиотеку, а затем напишите командную строку и интерфейс GUI для нее. Таким образом, ваш переход слоя не привязан к командной строке.
(Кроме того, этот способ добавляет еще одну проблему безопасности: не должен ли GUI сначала убедиться, что вызывается именно RIGHT todo.exe?)
Несколько лет назад Джоэл написал статью, в которой противопоставил эту разработку ("unix-стиль") методу GUI first ("Windows-стиль"). Он называл это Бикультурализмом .
Я думаю, что на Windows это станет нормальным (если это еще не произошло), чтобы обернуть вашу логику в сборки .NET, к которым вы можете получить доступ как от поставщика GUI, так и от поставщика PowerShell. Таким образом, вы получите лучшее из обоих миров.
Мой метод программирования бэкенд-функциональности сначала без необходимости в явном UI (особенно когда UI еще не является моей работой, например, я разрабатываю веб-приложение, которое все еще находится на стадии проектирования) заключается в написании модульных тестов.
Таким образом, мне даже не нужно писать консольное приложение, чтобы издеваться над выводом моего бэкенд-кода-это все в тестах, и в отличие от вашего консольного приложения мне не нужно выбрасывать код для тестов, потому что они все еще полезны позже.
Я думаю, что это зависит от того, какой тип приложения вы разрабатываете. Проектирование для командной строки ставит вас на быстрый путь к тому, что Алан Купер называет "Implementation Model" в заключенные управляют приютом . Результатом является пользовательский интерфейс, который является неинтуитивным и трудным в использовании.
37signals также выступает за то, чтобы сначала создать свой пользовательский интерфейс в Getting Real . Помните, что для всех целей и задач, в большинстве приложений, пользовательский интерфейс является программой. Внутренний код просто существует, чтобы поддержать его.
Вероятно, лучше начать с командной строки, чтобы убедиться, что у вас есть правильная функциональность. Если ваши основные пользователи не могут (или не хотят) использовать командную строку, то вы можете добавить GUI поверх своей работы.
Это сделает ваше приложение более подходящим для написания сценариев, а также ограничит количество предварительных Байкешеддингов , чтобы вы могли быстрее добраться до фактического решения.
Если вы планируете сохранить свою версию приложения для командной строки, то я не вижу проблемы в том, чтобы сделать это таким образом - это не потраченное впустую время. Вы все равно будете в конечном итоге кодировать основную функциональность вашего приложения для командной строки, и поэтому у вас будет большая часть работы.
Я не вижу, чтобы работа таким образом была препятствием для хорошего UI - у вас все еще есть время, чтобы добавить его и сделать пригодным для использования и т. д.
Я думаю, что этот способ работы будет действительно работать только в том случае, если вы хотите, чтобы ваше готовое приложение имело как варианты командной строки, так и GUI. Достаточно просто издеваться над UI и встроить в него свою функциональность, а затем украсить UI позже.
Согласитесь с Stu: ваша базовая функциональность должна быть в библиотеке, которая вызывается из командной строки и кода GUI. Вызов исполняемого файла из UI-это ненужные накладные расходы во время выполнения.
@jcarrascal
Я не понимаю, почему это должно сделать GUI "bad?"
Я думаю, что это заставит вас думать о том, что логика "business" действительно должна выполнить, не слишком беспокоясь о том, что все будет красиво. Как только вы знаете, что он должен/может сделать, вы можете построить свой интерфейс вокруг этого в любом случае, что имеет наибольший смысл.
Боковое примечание: не следует начинать отдельную тему, но каков предпочтительный способ обращения к ответам/комментариям на ваши вопросы? Я обдумал и это, и редактирование самого вопроса.
Я сделал именно это на одном инструменте, который я написал, и он отлично работал. Конечным результатом является скриптовый инструмент, который также может быть использован через GUI.
Я действительно согласен с мнением, что вы должны убедиться, что GUI является простым и интуитивно понятным в использовании, так что было бы разумно даже развивать оба одновременно... небольшая функция командной строки, за которой следует оболочка GUI, чтобы убедиться, что вы делаете все интуитивно.
Если вы верны реализации обоих в равной степени, результатом является приложение, которое можно использовать в автоматическом режиме, что, я думаю, очень мощно для опытных пользователей.
Отчасти зависит от вашей цели для программы, Но да, я делаю это время от времени - это быстрее кодировать, легче отлаживать и легче писать быстрые и грязные тестовые случаи. И до тех пор, пока я правильно структурирую свой код, я могу вернуться и закрепить GUI позже без слишком большой работы.
Для тех, кто предполагает, что эта техника приведет к ужасному, непригодному для использования UIs: вы правы. Написание утилиты командной строки-это ужасный способ создать GUI. Обратите внимание, все там думают о том, чтобы написать UI, который не является CLUI - не прототипируйте его как CLUI.
Но если вы пишете новый код, который сам по себе не зависит от UI , то идите на это.
Я обычно начинаю с библиотеки классов и отдельного, действительно дерьмового и базового GUI. Поскольку Командная строка включает в себя разбор командной строки, Я чувствую, что добавляю много ненужных накладных расходов.
В качестве бонуса это дает MVC-подобный подход, так как весь код "real" находится в библиотеке классов. Конечно, на более позднем этапе рефакторинг библиотеки вместе с реальным GUI в один EXE также является вариантом.
У Джона Грубера был хороший пост о концепции добавления GUI в программу, не предназначенную для одного: Ronco Spray-On Usability
Резюме: это не работает. Если юзабилити не разработано в приложении с самого начала, добавление его позже-это больше работы, чем кто-либо готов сделать.
Я бы не стал этого делать по нескольким причинам.
Дизайн:
GUI и CLI - это два разных интерфейса, используемых для доступа к базовой реализации. Как правило, они используются для различных целей (GUI-для живого пользователя, CLI-обычно для доступа с помощью сценариев) и часто могут иметь различные требования. Соединение этих двух вместе не является мудрым выбором и обязательно вызовет у вас неприятности в будущем.
Спектакль:
Как вы уже описали, вам нужно создавать исполняемый файл каждый раз, когда GUI нужно что-то сделать. Это просто отвратительно.
Правильный способ сделать это-поместить реализацию в библиотеку, которая вызывается как CLI, так и GUI.
Инструменты командной строки генерируют меньше событий, чем приложения GUI, и обычно проверяют все параметры перед запуском. Это ограничит ваш графический интерфейс, потому что для графического интерфейса было бы более разумно запрашивать параметры по мере работы вашей программы или после нее.
Если вы не заботитесь о GUI, то не беспокойтесь об этом. Если конечным результатом будет графический интерфейс, сначала сделайте графический интерфейс, а затем сделайте версию командной строки. Или вы можете работать над обоими одновременно.
Сделайте программу, которую вы выставляете как веб-сервис. затем сделайте графический интерфейс и командную строку, чтобы вызвать ту же самую веб-службу. Этот подход также позволяет сделать web-gui, а также обеспечить функциональность as SaaS для партнеров по экстрасети и / или лучше защитить бизнес-логику.
Это также позволяет вашей программе легче участвовать в среде SOA.
Что касается веб-сервиса, то не перегибайте палку. сделайте yaml или xml-rpc. Пусть все будет просто.
Есть несколько причин, почему делать это таким образом не очень хорошая идея. Многие из них уже упоминались, поэтому я просто остановлюсь на одном конкретном моменте.
Инструменты командной строки обычно вообще не являются интерактивными, в то время как GUI-это так. Это принципиальное отличие. Это, например, болезненно для длительных задач.
Ваш инструмент командной строки в лучшем случае распечатает некоторую информацию о ходе выполнения - новые строки, текстовый индикатор выполнения, кучу выходных данных ... Любой вид ошибки он может вывести только на консоль.
Теперь вы хотите шлепнуть GUI поверх этого, что вы делаете ? Проанализируйте выходные данные вашего давно работающего инструмента командной строки ? Сканировать для WARNING и ERROR в этом выводе, чтобы вызвать диалоговое окно ?
В лучшем случае, большинство UI, построенных таким образом, выбрасывают пульсирующую полосу занятости до тех пор, пока команда выполняется, а затем показывают вам диалоговое окно успеха или неудачи, когда команда завершается. К сожалению, это то, как много графических программ UNIX брошены вместе, что делает его ужасным пользовательским опытом.
Большинство репликаторов здесь правы, говоря, что вы, вероятно, должны абстрагировать фактическую функциональность вашей программы в библиотеку, а затем написать интерфейс командной строки и GUI одновременно для нее. Вся ваша бизнес-логика должна быть в вашей библиотеке, и либо UI (да, командная строка-это UI) должна делать только то, что необходимо для взаимодействия между вашей бизнес-логикой и вашим UI.
Командная строка слишком плоха для UI, чтобы убедиться, что вы разрабатываете свою библиотеку достаточно хорошо для GUI использования позже. Вы должны начать с обоих с самого начала, или начать с GUI программирования. Легко добавить интерфейс командной строки в библиотеку, разработанную для GUI, но гораздо сложнее наоборот, именно из-за всех интерактивных функций, которые понадобятся GUI (отчеты, прогресс, диалоги ошибок, i18n,...)
Это именно одно из моих самых важных осознаний о кодировании, и я хочу, чтобы больше людей приняли такой подход.
Только одно незначительное уточнение: GUI не должен быть оболочкой вокруг командной строки. Вместо этого нужно иметь возможность управлять ядром программы либо из GUI, либо из командной строки. По крайней мере, в начале и только основные операции.
Когда же это станет отличной идеей?
Если вы хотите убедиться, что реализация вашего домена не зависит от платформы GUI. Вы хотите кодировать вокруг фреймворка а не в фреймворк
Когда это плохая идея?
Когда вы уверены, что ваша структура никогда не умрет