问题标签 [interface-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
8962 浏览

.net - 接口/抽象类中的静态方法

首先,我了解接口或抽象类(在 .NET/C# 术语中)不能具有抽象静态方法的原因。然后我的问题更集中在最佳设计解决方案上。

我想要的是一组“帮助器”类,它们都有自己的静态方法,这样如果我从第三方供应商那里获得对象 A、B 和 C,我可以拥有带有方法的帮助器类,例如

由于我的 AHelper、BHelper 和 CHelper 类基本上都具有相同的方法,因此将这些方法移动到这些类随后派生的接口似乎是有意义的。但是,希望这些方法是静态的,这使我无法拥有一个通用接口或抽象类来派生它们。

我总是可以使这些方法非静态,然后首先实例化对象,例如

但是,这段代码对我来说似乎并不直观。你有什么建议?我应该完全放弃使用接口或抽象类(我现在所处的情况)还是可以对其进行重构以完成我正在寻找的设计?

0 投票
3 回答
653 浏览

.net - .NET 应用程序的插件设计

我正在考虑用 C#(目前是遗留的 VB6 代码)重写我们的应用程序的一部分。我开始使用的模块负责将来自各种系统的数据导入我们的数据库。大约每年 5-6 次,一个新客户要求我们为他们使用的系统编写一个新的导入。目前,这要求我们为添加到应用程序的每个新导入选项发布一个新版本的软件。

重写的目标之一是使应用程序支持插件。每个新的导入都可以成为一个单独的程序集,主机应用程序将识别并允许最终用户与之交互。这有望在某种程度上简化生活,因为我们可以简单地将一个新程序集放入目录中,并让它被主(主机)应用程序识别和使用。

我正在努力解决的问题之一与我们目前支持的导入选项之间的差异有关。在某些情况下,我们实际上让用户指向一个目录并将目录中的所有文件读入我们的系统。在其他情况下,我们允许它们指向单个文件并导入其内容。此外,某些导入具有用户应用的日期范围限制,而其他导入则没有。

我的问题是,我如何设计应用程序,以便在我们构建和支持的导入之间具有一定的灵活性,同时实现一个通用接口,使宿主应用程序能够轻松识别插件和选项每个都暴露给用户?

0 投票
1 回答
3978 浏览

interface-design - 什么是好的系统接口规范模板?

客户有许多不同的系统,他们计划将它们链接在一起,并要求提供一组系统接口规范,这些规范将记录用于连接不同部分的数据和协议。

接口是在进程之间而不是在用户之间。

对于我们可以用来记录系统接口的模板有什么建议吗?

0 投票
4 回答
536 浏览

data-structures - 在 MainFrame(或主对话框)和模态对话框之间传递数据的最佳方式是什么?

我需要一个模式对话框来收集一些用户输入。然后,我需要应用程序 MainFrame 使用相同的数据。

通常我的模态对话框会有一个指向某个 DataType 的指针,它能够存储我需要的内容,并且我会通过 MainFrame 的引用传递这个对象,以便能够在用户关闭模态对话框后恢复数据。

这是传递数据的最佳方式吗?

感觉不太对!

0 投票
6 回答
1483 浏览

c++ - *你*使用 C++ ABC 构造函数做什么?

这里的人们在该领域使用 C++ 抽象基类构造函数做什么?我说的是没有数据成员和非纯虚拟成员的纯接口类。

任何人都可以演示任何以有用的方式使用 ABC 构造函数的习语吗?或者仅仅是使用 ABC 实现接口的本质,它们保持为空、内联和受保护?

0 投票
2 回答
3004 浏览

c# - 如何在接口 C# 中调用事件?

所以我有一个设计问题。我有一个具有代表和事件的鼠标类。即MouseButtonPressed、MouseMoved。并且被状态引擎调用。

我想要发生的是创建一个像 IClickable 或 IDraggable 或 somthing 这样的接口,并在这些接口内有事件,当鼠标事件被调用时会被调用。

然后在 MouseDevice 类中它有

所以基本上我希望在调用 buttonClicked 时调用 Clicked。

有没有办法做到这一点?

0 投票
4 回答
2582 浏览

design-patterns - 图像编辑工具的高级设计模式

我最近开始创建一个图像编辑工具来满足一个非常特殊的需求。对于将要使用它的人来说,这和我自己的娱乐一样多。但是,我很早就遇到了一些架构障碍。

像任何图像编辑器一样,用户将使用“工具”来绘制和操作图像。我的第一次尝试包括一个简单的界面:

这(我认为)会很好而且很干净,并且可以轻松维护和扩展。只需添加接口对象并在运行时调用所选对象的 DrawEffect 方法。

这种方法的问题是不同的绘图工具不能干净地遵循一个界面。例如,钢笔工具只需要知道要绘制的点就可以工作。然而,矩形需要单击的第一个点以及当前位置。多边形工具需要跟踪多次鼠标点击。

我很难想出一个很好的方法来实现这一点。我现在能想到的最好的方法是为每个工具添加一个 switch 语句和一个 case,这意味着绘图逻辑将在 Canvas 类中,而不是由 Tool 类型的对象封装。因为这是实践,我想以正确的方式做到这一点。感谢您提前提供任何帮助。

0 投票
2 回答
245 浏览

search - 处理多个搜索选项的最佳方式是什么?

这可能是一个已经存在 20 年的问题,但我还是要问。我有一个有多个搜索选项的屏幕。有的可以组合。有些是独家的。

前任:

按名字和姓氏搜索

或者

按年龄搜索

处理这个问题的最佳方法是什么?我是否在应用程序中处理这个问题,或者调用许多函数中的 1 个,或者使用一大堆 if/else 调用 1 个函数。做一系列 if/else 似乎已经过时了。没有更有效的方法吗?

0 投票
2 回答
905 浏览

c++ - C++ DAL - 返回引用或填充传入的引用

[编辑 1 - 添加了第三个指针语法(感谢 Alex)]

对于 DAL,您更喜欢哪种方法以及为什么:

如果找不到车第一种方法返回null,第二种方法返回false。

第二种方法将在堆上创建一个 Car 对象并填充从数据库查询的数据。大概(我的 C++ 非常生锈)这意味着代码如下:

谢谢

0 投票
5 回答
74932 浏览

dependency-injection - 是否有用于初始化通过 DI 容器创建的对象的模式

我试图让 Unity 管理我的对象的创建,并且我想要一些在运行时才知道的初始化参数:

目前我能想到的唯一方法是在接口上有一个 Init 方法。

然后使用它(在 Unity 中)我会这样做:

在这种情况下runTimeParam,参数是在运行时根据用户输入确定的。这里的简单情况只是返回的值,runTimeParam但实际上参数将类似于文件名,并且初始化方法将对文件执行某些操作。

这产生了许多问题,即该Initialize方法在接口上可用并且可以多次调用。在实现中设置标志并在重复调用时抛出异常Initialize似乎很笨拙。

在我解决我的界面时,我不想知道任何关于IMyIntf. 不过,我真正想要的是知道这个接口需要某些一次性初始化参数。有没有办法以某种方式用这些信息注释(属性?)接口,并在创建对象时将这些信息传递给框架?

编辑:更多地描述了界面。