User interface 在类库中弹出对话框是个坏主意吗?

User interface 在类库中弹出对话框是个坏主意吗?,user-interface,class-library,User Interface,Class Library,我们有一些类库会弹出一个对话框,这样做是不是一个坏主意?是的,这是一个坏主意。如果windows服务要使用您的库,会发生什么情况 我能想到的唯一一种情况是,如果类库用于可视化显示组件,并且仅在该上下文中使用(即,仅包含对话框和UI组件),那么这种情况就可以了 在编写用于许多不同场景的类库时,您不希望出现需要人工干预的阻塞调用 您可以确定会话是否是交互式的,并选择创建弹出窗口,但这充其量只是一种攻击。类库旨在整合业务逻辑并减少代码重复。对话框应该显示在您的表示层中,在这里可以决定更好的方式 例如,

我们有一些类库会弹出一个对话框,这样做是不是一个坏主意?

是的,这是一个坏主意。如果windows服务要使用您的库,会发生什么情况

我能想到的唯一一种情况是,如果类库用于可视化显示组件,并且仅在该上下文中使用(即,仅包含对话框和UI组件),那么这种情况就可以了

在编写用于许多不同场景的类库时,您不希望出现需要人工干预的阻塞调用


您可以确定会话是否是交互式的,并选择创建弹出窗口,但这充其量只是一种攻击。

类库旨在整合业务逻辑并减少代码重复。对话框应该显示在您的表示层中,在这里可以决定更好的方式


例如,如果您在winform应用程序中使用类库,则该对话框将不同于显示在网站中的对话框。

这在很大程度上取决于您。如果这个类库包含许多其他GUI类,那么可能。如果此库包含域对象,那么这听起来是个坏主意。

您的库应该绑定到尽可能少的其他库以达到预期目的。除非您的库是某种gui库,否则不要使用弹出对话框。

我认为这是个坏主意。
但在某些情况下,您可能希望使UI逻辑可重用。在这种情况下,请尝试从单独的库中取出用户交互代码。

如果是用于显示对话框的类库,则选择“是”。对于任何其他类型的类库,则不是

库要做的正确的事情是接受诸如“getInformationFromUser”或“batherRor”之类的回调。然后由库调用者决定如何完成。或者,对于报告错误,它应该引发异常或返回错误代码


要让库显示对话框本身,它必须做出大量假设——库正在GUI程序中使用,使用什么GUI框架,用户理解什么语言等等。这是错误的,错误的,错误的。

我认为这是个坏主意。有关非可视化库类的示例,请参见。使用它时,它会将错误状态报告为返回值(例如if(!file.open(mode…),然后将最后一个错误保留为应用程序友好的枚举()和人类可读的错误字符串(),应用程序可以使用它轻松弹出对话框、将其打印到控制台或将其添加到日志等

正如您所看到的,这种方法使应用程序能够决定如何处理错误消息,而不是让库暂时让它感觉良好。

从理论上讲,如果它只在一个特定的应用程序中使用,并且您知道该应用程序只会与GUI一起使用,那么它就没有什么坏处

但严酷的现实是,库将趋向于变得越来越通用,您将在各种应用程序中需要它们,而不仅仅是基于GUI的应用程序。因此,您最好提前计划并禁止库中的对话框,然后以其他方式处理错误报告。

以下是我的想法: 这取决于类库的主要用途如果它是一个提供一些UI功能的UI模块,那么应该有一些对话框和表单等。但是如果它是一个应该向应用程序的其他部分提供一些服务(业务或数据访问)的库,那么库中不应该有UI元素