以图形方式布置GUI是否应视为“作弊”?


18

我有一个朋友,我的编程经验略多。我们谈论的是我们使用的所有不同编程技术,而Interface Builder也在讨论中。

作为的,除了我所教自己没有编程背景下,我个人认为,IB和它所有的功能(IBOutletsIBActions)我的技术水平的帮助编码器(和所有的技能水平,对于这个问题),在更短的时间他们的完整的项目。

他对IB的看法有点热情。他认为,使用Interface Builder的编码人员在“作弊”,因为他们不必手工布置接口。


题:

使用GUI构建器布置界面元素是否应该被认为是“作弊”(因为大多数程序最初都要求通过手工编写界面布置界面)?为什么?


32
为什么可以吠叫,当您可以买狗为您做呢?
jfrankcarr

29
使用皮卡车在作弊。真正的男人在120度天气中胜过并驯服野马。他们从后面接近他们。必填xkcd.com/378
作业

9
问你的朋友,为什么他不考虑使用计算机而不是手动做作弊
DPD

2
听起来您的朋友从未有过如此苛刻的截止日期。
MattDavey

15
认为作弊只是程序员的no俩。
艾伦B

Answers:


60

这不是在作弊。像IB这样的程序是工具。为工作选择合适的人。不需要教条主义。

如果使用这种工具更有效,请使用它。唯一需要注意的是,您在做出决策时应该权衡取舍。手工进行版面设计可为您提供精确的控制,但以拖放为代价。拖放工具使您可以快速而轻松地执行许多操作,但是随着时间的推移,可能会使您的代码难以维护。

就个人而言,我从未通过使用拖放式UI设计工具获得成功或从中获得很多乐趣,但这就是我自己。我发现手工布置GUI 对我来说是最有效,并且产生了随时间推移更易于维护的代码库。其他人则相反。


3
只需添加一下,设计器工具就是代码生成器。生成代码通常是一件好事,因为它可以生成代码,并且您可以继续做自己打算做的事情。使屏幕实际执行一些有用的操作。我的经历不一样;使用设计器工具比以前效率更高。
安迪

作为Andy的补充,正确的设计器工具可以改变世界。我已经使用Delphi / Lazarus进行GUI开发,这很棒。我还被授权使用MS Frontpage,而另一端的HTML则很糟糕。
Spencer Rathbun 2012年

FWIW,使用MFC,我使用视觉编辑器将其关闭,然后手动调整以使其正确。这对我来说似乎是最快的方法。
David Thornley,2012年

使用专业工具可以更快地完成工作,我没有问题,但要补充一点:我自己的偏好是定义数据驱动模型的工具,即XML中的UI'a布局-而不是代码生成器,为您撰写“ Button btn54 = new Button(x:543,y:782);”
Katana314

17

编程既不是一项运动,也不是一项游戏。因此,作弊论点非常薄弱。如果视觉工具提高了您的生产力,那么您将不使用它们会很愚蠢。我的经验是,这些经验使我可以花更多的时间在实际的问题解决代码上,而不必一遍又一遍地进行琐碎的接口工作。

但是请注意,设置或数据很容易爬到界面中。对保持表示和逻辑分离要大胆。


10

如果您要牺牲一些东西,那只会是作弊。大多数GUI布局仅生成您必须编写的代码(由于布局不足,通常必须手动编辑)。

所以基本上没有

在其他条件相同的情况下,任何可以让您更快地完成相同工作的工具都是很好的。


我坚决参与“使用可用的布局工具”阵营。即使生成的代码经常需要进行一些调整,这些工具也可以节省时间。“这是作弊”的家伙听起来像是一个人并没有花时间去理解所生成的内容以进行编辑。
吉姆(Jim)在德克萨斯州2012年

4

作弊是游戏的名称。在做出任何类型的开发决策时,您应始终走最简单的路线。称其为作弊,称其为“富有成效”;没有什么不同的。您应该选择能够以最少的工作量完成工作的工具(当然,不要忘记维护和可伸缩性)。

现在,特别是对于IB,您应该权衡IB节省的时间与必须维护更草率并且不熟悉的代码的成本。这实际上是视情况和每个人的决定而定的。在许多情况下,工具和向导使您能够以较低的维护成本来完成更多工作……有时,它们会引入草率代码和比您所知道的更多的泄漏抽象。看来您已经自己决定IB付出了它增加开发所付出的任何代价,但是,您的朋友可能会很容易地发现,该工具对他的阻碍大于它的帮助。


3

一定不行。但是,完全手动完成此举显然是为自己做不必要的工作的案例。

(通常,我会使用生成器进行布局,如果需要进行任何微调,它通常会-并非总是-手工完成)。


在2.0版本的.Net中,我相信GUI和逻辑是分开的,这要归功于部分类-同一类在两个不同的文件中定义;一种是完全自动生成的,另一种是您自定义的。
Job

我不同意这是“进行不必要工作的明确案例”的说法。这一切都取决于工具和程序员的技能。例如,我确定我可以比使用您选择的任何GUI构建器更快地编写tcl / tk GUI并手工编写更好的最终代码。OTOH,如果创建.net桌面应用程序,除了Visual Studio,我没有其他方法可以考虑使用。
布莱恩·奥克利

由于OP非常清楚地讨论了一般情况(请参见问题中的粗体文字),尽管我确实接受特殊情况可以并且确实存在,但我不能接受您对一般情况的不同意见。曾经如此。
Maximus Minimus 2012年

3

当然,这并不是在作弊,尽管我对没有一个GUI 不能布置GUI 的开发人员的尊重要少一些。IMO,使用一个与使用系统提供的数据类型没有什么不同-如果可以在系统库中使用一个,为什么要实现自己的链表或哈希图呢?

FWIW我几个月前不得不在Java Swing中实现UI。我从来没有使用过它,所以我全手工编写了它,这样我就可以更好地了解它的工作原理。现在,我已经知道了基本的API,如果可以的话,我再也不会手工编写了!


1

正如@Bryan Oakley所说,它只是一个工具,而不是“作弊”。这完全取决于您要布置的内容。如果通过手工进行难以置信的艰苦锻炼,那么您应该真正寻找其他替代方法来提高生产力。

我曾经在手工编写接口的大本营中工作,但是后来在布局了接口之后,我却向膝盖伸出了一根箭,并持不同意见。如果可以的话,这将使我的工作效率更高,那么我将使用图形工具来布置GUI。

最近使用MVVM模式,区别于View和ViewModel,它使您更清楚何时使用图形工具。当被问及从Web到应用程序开发的过渡时,Phil Haack在Windows版Github中的Herding Code播客中对此进行了简要讨论。使用“手动”编码来执行ViewModel更加有意义,并让设计人员以图形方式构建View(并相应地连接ViewModel)。


1

诸如Interface Builder之类的工具的一大优势是,它们使将UI的设计工作与程序的实现分离成为可能。编码技能最低的人可以轻松更改UI的布局,更改按钮和菜单标题,将UI转换为其他语言等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.