Questions tagged «user-interface»

有关软件与其人类用户互动的问题。

14
代码编辑器如何在不使用缩进的情况下有效地提示代码嵌套级别?[关闭]
我已经编写了一个XML文本编辑器,该编辑器为相同的XML文本提供2个视图选项,其中一个缩进(虚拟),另一个向左对齐。左对齐视图的动机是帮助用户“看到”用于纯文本或XPath代码缩进的空白字符,而不会受到作为XML上下文的自动副作用的缩进的干扰。 我想为左对齐模式提供视觉线索(在编辑器的不可编辑部分),这将对用户有所帮助,但又不会太复杂。 我尝试仅使用连接线,但是似乎太忙了。到目前为止,我所提出的最好的结果显示在下面的编辑器的模拟屏幕快照中,但是我正在寻找更好/更简单的替代方法(不需要太多的代码)。 [编辑] 以热图的想法(来自:@jimp),我得到了这个和3个替代方案-分别标记为a,b和c: 下一节将接受的答案描述为一个建议,将其他答案和评论中的想法汇集在一起​​。由于此问题现在是社区Wiki,请随时进行更新。 NestView 这个想法的名称提供了一种直观的方法,可以在不使用缩进的情况下提高嵌套代码的可读性。 等高线 NestView中不同阴影线的名称 上图显示了NestView,用于帮助可视化XML代码段。尽管XML用于此插图,但使用嵌套的任何其他代码语法也可以用于此插图。 概述: 等高线被着色(如在热图中)以传达嵌套水平 等高线倾斜以显示何时打开或关闭嵌套层。 等高线将嵌套层的起点链接到相应的终点。 除了热图之外,轮廓线的组合宽度还给人以嵌套层次的视觉印象。 NestView的宽度可以手动调整大小,但不应随代码更改而改变。轮廓线可以压缩或截断以保持这一点。 有时使用空行代码将文本分解为更多可消化的块。这些行可能会在NestView中触发特殊行为。例如,可以重设热图或使用背景色轮廓线,或同时使用两者。 与当前所选代码关联的一条或多条轮廓线可以突出显示。与所选代码级别关联的轮廓线将得到最大程度的强调,但其他轮廓线也可以“亮起”,以帮助突出显示包含嵌套的组 可以在轮廓线上单击/双击不同的行为(例如代码折叠或代码选择)。 等高线的不同部分(前缘,中间或后缘)可能具有不同的动态行为。 可以在轮廓线上方的鼠标悬停事件上显示工具提示 随着代码的编辑,NestView会不断更新。在嵌套不均衡的地方,可以假设嵌套层应该在哪里结束,但是必须以某种方式突出显示关联的临时轮廓线,以作为警告。 可以支持轮廓线的拖放行为。行为可能会随所拖动的轮廓线的部分而变化。 通常在左边距中发现的功能(例如行号和错误的颜色突出显示以及更改状态)可以覆盖NestView。 附加功能 该提案解决了一系列其他问题-许多问题超出了原始问题的范围,但产生了有益的副作用。 可视地链接嵌套区域的开始和结束 等高线连接每个嵌套层的起点和终点 突出显示当前选定行的上下文 选择代码后,可以突出显示NestView中关联的嵌套级别 区分同一嵌套级别的代码区域 对于XML,可以将不同的颜色用于不同的名称空间。编程语言(例如c#)支持可以以类似方式使用的命名区域。 将嵌套区域内的区域划分为不同的可视块 通常在代码中插入多余的行以提高可读性。这样的空线可用于重置NestView等高线的饱和度。 多列代码视图 没有缩进的代码使使用多列视图更加有效,因为不太需要自动换行或水平滚动。在此视图中,一旦代码到达一列的底部,它将流入下一列: 用途不仅仅提供视觉帮助 正如概述中所建议的那样,NestView 可以提供一系列的编辑和选择功能,这些功能与TreeView控件的预期大致相符。关键区别在于,典型的TreeView节点分为两部分:扩展器和节点图标。NestView等高线最多可以包含3个部分:打开器(倾斜),连接器(垂直)和闭合(倾斜)。 压痕 与非缩进代码一起显示的NestView是对传统缩进代码视图的补充,但不太可能替代。 任何采用NestView的解决方案都可能会提供一种在缩进和非缩进代码视图之间无缝切换而又不影响任何代码文本本身(包括空格字符)的方法。缩进视图的一种技术是“虚拟格式设置”-使用动态左边界代替制表符或空格字符。用于动态呈现NestView的相同嵌套级数据也可以用于外观更传统的缩进视图。 列印 缩进对于打印代码的可读性很重要。在这里,没有制表符/空格字符和动态的左边距意味着文本可以在右边距处换行并仍然保持缩进视图的完整性。行号可用作可视标记,用于指示代码在何处换行以及缩进的确切位置: 屏幕真实状态:缩进与缩进 解决NestView是否用完宝贵的屏幕房地产的问题: 轮廓线的宽度与代码编辑器的字符宽度相同时,效果很好。因此,在轮廓线被截断/压缩之前,NestView宽度为12个字符的宽度可以容纳12个嵌套级别。 如果缩进视图的每个嵌套级别使用3个字符宽度,则将保留空间,直到嵌套达到4个嵌套级别为止。在此嵌套级别之后,平面视图具有节省空间的优点,该优势随每个嵌套级别而增加。 注意:对于代码,通常建议最小缩进4个字符的宽度,但是XML经常使用较少的字符。此外,虚拟格式化允许使用更少的缩进,因为没有对齐问题的风险 …

25
一个人应该多远进行一次电子邮件地址验证?
我想知道人们应该花多长时间验证电子邮件地址。我的领域主要是网络开发,但这适用于任何地方。 我看过几种方法: 只需检查是否存在“ @”,这很简单,但当然不是那么可靠。 用于标准电子邮件格式的更复杂的正则表达式测试 一个针对RFC 2822的完整正则表达式 -问题在于通常一个电子邮件地址可能是有效的,但它可能不是用户的意思 DNS验证 SMTP验证 正如许多人可能知道(但许多人却不知道)一样,电子邮件地址可能具有很多人通常不考虑的许多奇怪变化(请参阅RFC 2822 3.4.1),但是您必须考虑以下目标:您的验证:您只是在尝试确保可以将电子邮件发送到某个地址,或者是用户可能要输入的电子邮件(在很多其他晦涩的情况下,否则“有效”是不可能的)的地址)。 我考虑过的一个选项只是用一个更加深奥的地址发出警告,但仍然允许请求通过,但这确实增加了表单的复杂性,并且大多数用户很可能会感到困惑。 虽然DNS验证/ SMTP验证似乎很容易,但我可以预见到DNS服务器/ SMTP服务器暂时关闭且用户无法在某处注册,或者用户的SMTP服务器不支持所需功能的问题。 一些经验丰富的开发人员将如何处理此问题?除了我列出的方法以外,还有其他方法吗? 编辑:我完全忘记了最显而易见的一切,发送确认电子邮件!感谢答复者指出这一点。是的,这很简单,但是涉及的每个人确实需要额外的麻烦。用户必须获取一些电子邮件,开发人员需要在甚至确认用户数据有效之前记住用户数据。

17
设计一种架构,认为可以将用户界面类替换为命令行界面,这是一个好主意吗?
在第25页的“代码完成”中,据说可以用命令行轻松替换常规用户界面类是一个好主意。 知道其测试优势,它可能带来什么问题呢? 这项额外的工作真的能为Web和移动项目带来回报吗?中小型项目呢?相同的规则适用吗?如果这会使您的设计更复杂怎么办?


9
一般来说,是让所有功能部件先使UI工作-还是两者兼而有之更好?
一般来说,是让所有功能部件先使UI工作-还是两者兼而有之更好? 假设您正在做的事情比较大,通常是在所有UI之前使所有功能数据收集Blob工作,或者一次使所有UI一起工作,还是在中间进行工作,这是公认的惯例吗? 我们都知道将工作分解为可管理的部分,但问题是最终我是否应该将UI包含在可管理的部分中。 对于该示例,请考虑一个GUI应用程序,该应用程序具有一个根窗口,但在各个扩展坞中有12个以上的选项卡用于分隔不同的数据组件。从功能单元的角度来看,每个单独的选项卡后面都有一组相对复杂的运动部件。 此特定问题的示例应用程序在此处带有随附的博客和原始商业产品。

6
应该向用户显示多少有关错误的信息?
应用程序总是会抛出错误。如果发生此类错误,则应通知用户,因为他要求应用程序执行的操作未成功。 但是,应该向用户提供多少信息?我认为我们大多数人都同意不显示堆栈跟踪(堆栈跟踪是否应该出现在向用户显示的错误消息中?),但是我找不到有关其余错误内容或向错误显示的内容的问题。用户。 例如,支持异常的语言(.net,java)具有共享的异常类型(发生异常的位置)以及与异常一起传递的澄清消息。还应该对用户隐藏吗?还是我们应该显示这个?还是应该显示一般性消息?还是应该根据潜在的异常是显示大量消息之一?

4
在GUI编程中,调用方为什么要确保线程安全?
我已经在许多地方看到,规范知识1是调用者的责任,以确保您在更新UI组件时位于UI线程上(特别是在Java Swing中,您位于Event Dispatch Thread上) 。 为什么会这样呢?事件分发线程是MVC / MVP / MVVM中视图的关注点;在视图之外的任何地方处理它,都会在视图的实现和该视图的实现的线程模型之间建立紧密的耦合。 具体来说,假设我有一个使用Swing的MVC架构的应用程序。如果调用者负责更新事件调度线程上的组​​件,则如果我尝试将Swing View实现换成JavaFX实现,则必须更改所有Presenter / Controller代码以改为使用JavaFX Application线程。 因此,我想我有两个问题: 为什么调用者有责任确保UI组件线程安全?我上面的推理中的缺陷在哪里? 我该如何设计我的应用程序以松散耦合这些线程安全问题,但仍然是适当的线程安全? 让我添加一些MCVE Java代码来说明“调用者负责”的含义(这里还没有其他好的做法,但我试图将其尽量减少): 来电者负责: public class Presenter { private final View; void updateViewWithNewData(final Data data) { EventQueue.invokeLater(new Runnable() { public void run() { view.setData(data); } }); } } public class View { void …

14
自动化的用户界面测试解决了什么问题?
我们目前正在研究自动化的用户界面测试(我们目前正在进行自动化的单元和集成测试)。 我们已经研究了Selenium和Telerik,并且由于后者的记录器更加灵活,因此选择了后者作为首选工具-我们真的不希望测试人员编写太多的代码。 但是,我试图了解整体利益。人们的看法是什么,什么样的事情行之有效,什么行不通? 我们的系统正在不断开发中,我们会定期发布(基于Web的)平台的新版本。 到目前为止,我们可以看到的主要好处是进行回归测试,尤其是在我们平台的多个客户端部署之间。 真正在寻找别人的意见。我们“认为”这是对的,但是在已经很忙的日程中,我们正在寻找更多的见解。

4
JavaScript的提示,确认和警报被认为是“过时的” [关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 最近,我一直在为体育馆开发基于Web的管理系统。他们以前的应用程序是用Visual Basic开发的。对于新应用程序,所有前端脚本都使用jQuery,服务器正在运行PHP和MySQL ...您知道,这是典型的基于el-cheapo linux的堆栈。 无论如何,我想知道为什么如今JavaScript的提示,确认和警报消息对话框没有得到充分利用。有很多用于模态窗口和警报消息的jQuery插件,它们试图模仿该语言已经提供的功能,并且每个浏览器都必须正确支持。 对于复杂的表单和特殊需求,可以使用手工制作或基于插件的解决方案,但是如果您只需要索取单个值或确认删除记录,为什么要将这样的开销添加到Web应用程序中?此外,当您使用提示,确认和警报时,iOS和Android提供了适应性强的消息对话框。

2
如何在保持效率的同时将用户界面与业务逻辑分开?
假设我想显示一个表示组合框上10个不同对象的表单。例如,我希望用户从10个不同的包含番茄的汉堡包中选择一个。 因为我想分离UI和逻辑,所以我必须通过表单来表示汉堡包的字符串,以便在组合框中显示它们。否则,UI必须深入到对象字段。然后,用户将从组合框中选择一个汉堡包,并将其提交回控制器。现在,控制器将不得不根据表单使用的字符串表示形式(也许是ID?)再次查找所述汉堡包。 这不是效率低下吗?您已经有了想要从中选择一个的对象。如果您将整个对象提交给表单,然后返回一个特定的对象,则以后不必重新引用它,因为表单已经返回了对该对象的引用。 而且,如果我错了,而您实际上应该将整个对象发送到表单,那么如何将UI与逻辑隔离?

6
在哪里可以找到良好用户界面的灵感?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 关于为当前正在升级的桌面应用程序设计主屏幕界面,我有一个想法。当我第一次开发该程序时,屏幕分辨率为640 X480。今天有多种屏幕分辨率。 在哪里可以找到有关桌面应用程序主屏幕布局良好的想法?

3
在编程社区中,是否会在工作场所软件中添加奖励积分或游戏功能?
因此,我在工作中的职责之一就是建立一个内部工具,以帮助工人输入所有信息。这是一个企业应用程序,类似于Windows表单数据库工具。 因此,这与开发Word + Excel组合应用程序没什么不同,但是该工作组中的普通人是20-40岁的女性或随意聊天的男性类型。另外,我知道所有这些人每天都与Facebook紧密联系。 如果我将新界面的样式设置为类似于Facebook,那将是多么糟糕。当人们填写不同类型的表格并像游戏一样基本相互竞争时,他们可以获得奖励积分和东西。当人们完成其中的一项后,它将被张贴在墙上,每个人都可以像在Facebook中一样评论/喜欢这些内容。就像他们在做同行评审一样有趣。 我想像中的回报是巨大的。这些人沉迷于Facebook和Facebook游戏,由于他们努力竞争并赢得积分和成就,因此生产力将提高。 这将是通过“通过让他们给他们一个游戏来使他们更加努力地工作”来利用人们的优势,还是被视为可以改善工作中幸福感的东西?

12
在新网站上使用“使用Twitter / Facebook登录”的利弊是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我自己和一个朋友正在寻找一个小论坛站点。我正在考虑使用“使用Facebook / Twitter登录” API(可能专用(例如,Lanyrd))进行用户登录。我以前从未使用过这些工具,也没有用用户登录来运行网站。 这些API的优缺点是什么?特别: 作为开发人员,使用它们有什么好处?有什么缺点? 最终用户是否真的喜欢/不喜欢他们? 您是否曾经历过这些API的任何技术/后勤问题? 到目前为止,这是我的优点和缺点: 优点 为用户带来更多便利(单击两次即可“注册”,一次即可登录) 可能无需维护我们自己的登录系统 缺点 无法控制我们的登录过程 排除那些担心我们无法访问其帐户的Facebook / Twitter用户 如果用户的Facebook / Twitter帐户遭到破坏,则我们网站上的用户帐户也会受到破坏。 如果我们不维护自己的替代登录系统,请执行以下操作: 我们的登录系统对Facebook / Twitter的依赖性 从我们的网站中排除非Facebook /非Twitter用户

4
如何为GUI编写可维护的而不是脆弱的单元测试?
我尝试为我的GUI应用程序编写UI单元测试,但我遇到的问题是,尽管在我最初编写它们时它们可以很好地工作,但是它们却很脆弱,并且每当设计更改时(即经常)它们就会损坏。我正在努力寻找一套指导方针,以使我能够进行GUI的可维护单元测试。 就目前而言,我发现的一件事是,测试表明“该组件应在某处显示其输入数据”是很好的(并且使用HTML非常容易)。检查组件特定部分的特定状态的测试通常很脆弱。试图遵循用户行为和基本业务逻辑(这是最重要的部分)的测试,如单击-单击-单击-预期,通常会变得很脆弱。如何编写好的测试? 更精确地说,我想了解一些模式有什么可我在UI测试,不完全是如何对其进行测试。命名约定和固定标识符很好,但是不能解决核心问题,即GUI发生了很大变化。我想测试最不可能改变的行为。如何找到合适的东西进行测试?

2
“撤消打字”应该如何表现?
我正在实现一个包含撤消/重做堆栈的Java应用程序。我注意到有些应用程序(例如Mac OS X上的TextEdit)允许您在键入一些文本后从“编辑”菜单中选择“撤消键入”。我也想在我的应用程序中实现这种功能,但是我很难找到有关其行为方式的准则。 经过反复试验,关于TextEdit的“撤消键入”行为的最佳猜测是: 当用户键入一个新字符(或键入删除键)时,如果一个字符位于“撤消”堆栈的顶部,则将其合并到上一个“撤消键入”项中,除非发生以下情况之一 用户至少闲置15秒后继续输入内容,请务必创建新的“撤消键入”项目 用户长时间输入并满足某些条件后,请务必创建一个新的“撤消键入”项目(无法确定这是基于时间还是基于字符计数)。 选择任何文本然后删除或覆盖文本时,始终创建一个新的“撤消键入”项目(选择文本,不进行更改,然后返回到原始插入点并继续键入不会触发此操作) 在实践中,Apple的策略似乎行得通(至少在我键入时对我有效),但是正如最后一点所指出的那样,我实际上还无法弄清楚规则。另外,似乎其他程序遵循不同的规则,例如Microsoft Word。Google尚未为任何“撤消键入”实施提供明确的规则列表,而且我还没有遇到任何应如何操作的最佳实践。那么它应该如何表现呢?还是仅仅取决于程序员的想法? 编辑:只是为了澄清,我现在对实现细节不感兴趣。对于是否存在权威的参考文献(例如最佳实践或用户界面文档)进行描述或对如何在多种产品中实现的描述,我尤其感到好奇。

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.