gpt4 book ai didi

C# - 确定 GUI 和逻辑类之间的责任

转载 作者:太空宇宙 更新时间:2023-11-03 20:22:55 26 4
gpt4 key购买 nike

我有一个表单和一个逻辑类。根据用户操作,该类会生成一个操作列表。然后这些操作需要在表单上显示为按钮,以便用户可以从中进行选择。我最初的解决方案是这样的:

public class Logic {
public List<string> GetActions() {
List<string> result = new List<string>();
// ...prepare list
return result;
}
}

public class FrmGUI : Form {
Logic logic = new Logic();
private void PopulateButtons() {
foreach(string action in logic.GetActions(){
//...create button
}
}
}

GUI 从 Logic 类中检索字符串列表,然后使用它来填充带有按钮的面板。现在假设这是不好的 OO 实践,因为我正在公开一些关于 Logic 类的行为方式。这里假设 GetActions 方法将始终存在,并且 Logic 类将始终能够返回此字符串列表。

另一种解决方案是这样的:

public class Logic {
public void PopulateButtons(Panel panel, Action<object, EventArgs> eventHandler) {
// ...prepare list
// ...populate buttons
}
}

public class FrmGUI : Form {
Logic logic = new Logic();
private void PopulateButtons() {
logic.PopulateButtons(this.panel1, actionButtonClickHandler);
}
}

现在 GUI 类对逻辑类一无所知,只希望填充按钮。另一方面,逻辑类现在涉及 GUI 内容。

处理此类情况的正确方法是什么。或者有没有更好的第三种实现。

最佳答案

我会使用前一种模式:逻辑层创建信息,UI 层使用该信息创建 UI。

这样一来,如果您决定重新设计 UI 的外观以使用项目的下拉列表,您只需更改 UI 层,而无需更改逻辑。

这意味着 UI 层对逻辑层提供的类型/数据的依赖最小(只要它不知道逻辑是如何实现的,那很好),但是逻辑层有完全不知道 UI 实现是什么——这就是您想要的(系统中的较低级别组件不应该对较高级别的设计一无所知,而较高级别的组件必须对低级别组件有基本的了解他们使用的)。

最好是应用程序(或其他一些外部实体)同时创建逻辑和用户界面并将它们链接在一起,而不是用户界面本身创建逻辑 - 这将有助于用户界面和逻辑更加松散地耦合.

关于C# - 确定 GUI 和逻辑类之间的责任,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12423731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com