如何设计一个可重用于GUI未来开发的命令行程序?

sys*_*out 19 language-agnostic scripting user-interface open-source

在开发可以与GUI集成的脚本程序时,要记住哪些最佳实践,可能是其他人在将来?

可能的情况:

  1. 我开发了一个花哨的python CLI程序,它可以从Web上抓取每个独角兽图像
  2. 我决定在github上发布它
  3. 独角兽粉丝程序员决定获取源并在其上构建GUI
  4. 他/她放弃是因为我的代码不可重复使用

如何防止第四步让独角兽粉丝程序员在没有太多麻烦的情况下构建他/她的GUI?

Kla*_*sen 14

您可以通过应用大部分分层(可能实现MVP模式)并将CLI视为UI本身来实现.

UPDATE

维基百科关于Model-View-Presenter模式的文章中的这篇文章很好地解释了它.

模型 - 视图 - 展示器(MVP)是一种用户界面设计模式,旨在促进自动化单元测试并改善表示逻辑中关注点的分离.

  • 该模型是定义要在用户界面中显示或以其他方式操作的数据的接口.

  • 视图是一个界面,它显示数据(模型)并将用户命令(事件)路由到演示者以对该数据进行操作.

  • 演示者对模型和视图起作用.它从存储库(模型)中检索数据,持久化并格式化以便在视图中显示.

重点是您需要在应用程序中分离关注点.您的CLI将是视图的一个实现,而独角兽粉丝将为富客户端实现另一个视图.独角兽粉丝会将他的观点建立在与CLI相同的演示者身上.如果这些演示者不足以满足他的富客户端,他可以轻松添加更多,因为每个演示者都基于模型中的数据.反过来,该模型是应用程序的所有核心逻辑所基于的.设计一个好的模型本身就是一个完整的主题.您可能有兴趣阅读有关域驱动设计的内容,即使我不知道它对您当前的应用程序有多好.但无论如何它的阅读很有意思.正如您所看到的,关于MVP的维基百科文章也讨论了可测试性,如果您想为其他人提供强大的框架,这也是至关重要的.为了在代码库中达到高级别的可测试性,使用某种依赖注入框架通常是个好主意.

我希望这能让你大致了解你需要采用的技术,虽然我知道它可能有点压倒性.如果您有任何疑问,请随时询问.

/克劳斯


coo*_*ird 6

这听起来像是关于如何编写可用代码的问题.

在考虑代码的可重用性时,一般来说,应该尝试:

  • 将功能分离到模块中
  • 有一个明确定义的界面

将功能分离到模块中

应该尝试将代码分成具有简单责任的部分.例如,出去上网以刮去独角兽图片的程序可以分成以下部分:a)刮擦网络以获取图像,b)确定图像是否是独角兽,以及c)将所述独角兽图像存储到指定的某些部分中地点.

有一个明确定义的界面

拥有精心设计的接口,API(应用程序编程接口)对于提供重用或扩展应用程序的方法至关重要.

为每个功能提供入口点将允许其他程序员实际为所提供的功能编写新的用户界面.