9

身在其坑,不知其深:GUI

 3 years ago
source link: https://my.oschina.net/idea4good/blog/4877871
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
身在其坑,不知其深:GUI - idea4good的个人空间 - OSCHINA - 中文开源技术交流社区

GUI是个大坑,Linux之父也得绕道而行,理由是:他想让自己的活的久一点!
GUI也是性价比最高的软件作品,君不见各大操作系统,即使功能不做任何调整,也会隔三差五的更新UI;所谓的操作系统更新,已经被冠以界面更新了,虽然被很多程序员不齿,但其宣传效果和用户期待度都非常之高。功能可以千篇一律,但是界面风格必须不拘一格,对吧?

所以,无论你是老板,技术总监,还是普通程序员,GUI永远是你需要着重考虑的事情!

可能有的同学说,这好办呀,我用Qt,Android,Windows,以及JavaScript VUE框架就好了呀。首先我很赞成你使用这些大型知名框架,但如果我告诉你很多大厂和知名软件都很少用它们,你信吗?

你可能会说:不会吧,你看这些UI控件多漂亮呀,你看这按钮,你看这LIST,你看这字体。。。请回答一个问题:你见过单纯眼睛,或者鼻子好看的美女吗?你见过五官都很一般,但搭配起来很标志的面孔吗?

当你试图通过大型GUI库解决你的UI问题,其实你已经入坑了。处于某种默契,市面上没人任何书籍对这个问题作说明,群主也只敢在这方寸之间和大家讨论一下自己不成熟的看法。

GUI工作如此繁琐的原因其实也很简单,因为GUI根本就不是一个软件工程师干的活~~~GUI是一个艺术工作,一般都有艺术类专业人才完成;这里大家不要抬扛哈,我相信一定有人程序写的好,UI设计也很棒。但这样人非常少,我们不得不承认审美是技术活,我们大部分人都干不了这个活。抖音,快手,出点审丑的视频非常高产,但出点审美的东西,那是相当的困难。

GUI作为一种整体艺术,非常注重搭配,毁掉一个UI的方法实在太多了,有时是一个字体毁全局,有时几个像素就够了。即使是一些十分常规的控件,在不同的整体效果下,改改配色,处理几个像素的视差,这都是非常必要的。一招吃三年,这句话在艺术圈是不存在的。齐白石画了很多虾的作品,请告诉我那副作品是一样的?哪副画,有复用的可能?一位临摹梵高画作的高级画匠,看到梵高真迹的时候,才发现临摹与真迹居然还有这么大的差距~~~

综上所述,相信你应该知道了GUI工作繁琐的原因了,因为GUI是无限变化的。很多大厂已经有了很多控件库,但真正使用的时候,也用不了几个,最终的结果就是:控件库越来越大,使用率越来越低。

同理,无论Qt,WPF,.NET有多少单独看起来美妙绝伦的控件,但你能直接用的,几乎没有。所以,GUI框架给你提供的默认控件其实给你的帮助不大,一旦有新产品,重新设计控件是必需的,所以,GuiLite的设计理念就是:与其给你提供一些用不上的控件,不如把控件制定规则尽量简单化,让开发者更容易变换出各种样式的控件,从而满足艺术家,GUI设计师天马行空的想象力。

当然,大型GUI框架也明白:原始控件的复用率很低这个事实,为了提高对开发者的粘性,他们会把GUI框架绑定很多看上去很美的语法糖,甚至对操作系统的标准接口重新封装,请问,谁还敢说Qt是个纯粹的GUI框架?相反它几乎无所不包,甚至IDE。

可是繁华落去,无论如何掩盖,最后要解决的GUI问题还是没有解决,甚至发现自己还被一系列特定的开发环境死死的粘住。这真的是非常好的商业模式,这是天才的设计。

GUI是艺术和程序员的结合体,需要同时从两个角度出发,才能寻找到合理、实用的解决方案。程序员需要了解艺术,艺术家需要了解程序。程序员喜欢的复用,往往是对艺术家想象力的最大限制;当你给艺术家提供一大堆控件库、和控件自动布局的时候,艺术家可能更喜欢手上的铅笔和白纸。

请大家千万不要误会,这里不是说大型GUI无用(GuiLite跟它们也是兼容的),相反,在很多时候,只要你对细节不要太较真,它们往往是第一选择。只是今天的技术大有往定制化方向发展的趋势。就好比:很多时候intel的通用CPU也可以作数字处理,图形处理;但比起DSP,GPU这种专门芯片而言,效能就不占优势;甚至进行特殊处理的苹果M1芯片,虽然还是一款通用CPU,但其效能上直接碾压Intel。或者,再打一个比方:集成电路软件早就具备自动布线功能,但在真正产品化的过程中,这一招绝对是限制使用的,很多时候需要布线工程师根据自己的经验,对走线精心布局,不断调优。

Qt的少数高阶开发者也能对控件细节进行随心所欲的深度定制,而且效率也不错;而GuiLite的开发者除了在细节上全面把控外,还会对核心进行改造,并衍生出了GuiLite python版本,GuiLite C语言版本。如果GUI只是你的附属品,我想常规GUI框架就足够了;如果需要对GUI进行长期打磨,持续更新的话,可能GuiLite是一个选择。二者的出发点不一样,可能谁都不会,也不愿意变成对方。

GuiLite复用的是内部机制,跟外部的UI元素无关,从demo wall,大家可以看到所有的实例都风格迥异,从外形看来,毫不搭嘎,但他们都是100行就能实现的效果。

最后,当你在判断某个GUI效果,用哪个框架可以实现的时候,你可能已经快入坑。为了避免更大的陷阱,你需要从艺术家的视角思考一下你的问题,我相信你需要的不是一个固定的外形,你可能需要的是一个:铅笔般的简单核心和无形的外形。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK