Подтвердить что ты не робот

Как разработать программу командной строки, которую можно использовать повторно для будущего развития графического интерфейса?

Какие рекомендации следует учитывать при разработке программы script, которая может быть интегрирована с графическим интерфейсом, возможно, кем-то еще в будущем?

Возможный сценарий:

  • Я разрабатываю причудливую программу CLI python, которая сбрасывает все изображения единорога из Интернета.
  • Я решил опубликовать его на github
  • Программист-программист единорога решает взять источники и создать графический интерфейс для них.
  • он/она отказывается, потому что мой код не используется повторно

Как предотвратить шаг четвертый, позволяя программисту вентилятора единорога строить свой графический интерфейс без лишних хлопот?

4b9b3361

Ответ 1

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

UPDATE

Этот текст из статьи wikipedia об Model-View-Presenter описывает это довольно хорошо.

Model-view-presenter (MVP) является пользователем дизайн интерфейса, спроектированный для облегчить автоматическое модульное тестирование и улучшить разделение проблем в логика представления.

  • Модель представляет собой интерфейс, определяющий отображаемые данные или в противном случае действует в пользователе интерфейс.

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

  • Ведущий действует на модель и представление. Он извлекает данные из репозиториев (модель), сохраняется и форматирует его для отображение в представлении.

Главное, что вам нужно работать над разделением внимания в своем приложении. Ваш CLI будет одной реализацией представления, тогда как поклонник единорога будет реализовывать другое представление для богатого клиента. Вентилятор единорога, основывал бы его взгляд на тех же ведущих, что и ваш CLI. Если этих докладчиков недостаточно для его богатого клиента, он может легко добавить больше, потому что каждый ведущий основан на данных из модели. Модель, в свою очередь, является основой всей основной логики вашего приложения. Проектирование хорошей модели - это целая тема сама по себе. Вам может быть интересно прочитать, например, Domain-Driven Design, хотя я не знаю, насколько это хорошо относится к вашему текущему выражение. Но это все равно интересно. Как вы можете видеть, статья Википедии о MVP также говорит о тестируемости, что также имеет решающее значение, если вы хотите создать надежную основу для других. Чтобы достичь высокого уровня тестируемости в вашей кодовой базе, часто рекомендуется использовать какой-то Framework Injection.

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

/Клаус

Ответ 2

Это звучит как вопрос о том, как писать полезный код.

При рассмотрении reusablility кода, вообще говоря, нужно попробовать:

  • отдельная функциональность в модули
  • имеют четко определенный интерфейс

Разделение функциональности на модули

Следует попытаться разделить код на части, которые несут простую ответственность. Например, программа, которая выходит в Интернет, чтобы очистить изображения единорогов, может быть разделена на разделы, которые: а) царапины в Интернете для изображений, б) определяет, является ли изображение единорогом и в) хранит изображения единорога в некоторые указанные местоположение и др.

Имеет четко определенный интерфейс

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

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

Ответ 3

Решение этой проблемы очень просто, но на практике у многих младших программистов возникают проблемы с этим шаблоном. Здесь решение:

  • Вы разрабатываете API-интерфейс для скремблирования единорога. Это трудный шаг; хороший дизайн API безумно тяжелый, и примеров для изучения не так много. Один API, который, я думаю, стоит изучить, - это книга в книге Дейва Хэнсона C-интерфейсы и реализации.

  • Затем вы создаете свой интерфейс командной строки. Если функциональность, которую вы подвергаете, не сложна, это не слишком сложно. Но если это сложно, вы можете серьезно подумать об управлении вашим API, используя встроенный язык сценариев, например Lua или Tcl и разработка интерфейса для сценариев, а не для командной строки.

  • Наконец, вы пишете код обработки командной строки и склеиваете все вместе.

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

Как отмечено в других ответах, модель /view/controller может быть хорошим шаблоном для проектирования вашего API.

Ответ 4

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

Помимо этого, программа к интерфейсу, а не к реализации - сущность MVC/MVP, как отметил класбысков. например, Не вызывайте напрямую file.write(); make myModel.saveMyData(), который вызывает file.write, так что кто-то другой может сделать somebodysModel.saveMyData(), который записывает в базу данных.