我有一个表格和一个逻辑类。基于用户操作,该类生成操作列表。然后这些操作需要在表单上显示为按钮,以便用户可以从中进行选择。我最初的解决方案是这样的:
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 的东西。
处理此类情况的正确方法是什么。或者是否有第三个更好的实现。