フォームとロジック クラスがあります。ユーザーのアクションに基づいて、クラスはアクションのリストを生成します。これらのアクションは、ユーザーが選択できるように、フォーム上にボタンとして表示する必要があります。私の最初の解決策はこれでした:
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 クラスから文字列のリストを取得し、それを使用してパネルにボタンを配置します。Logic クラスの動作について何かを公開しているため、これはおそらく OO の悪習です。ここでは、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 に関与しています。
そのような場合を処理する正しい方法は何ですか。または、より優れた 3 番目の実装があります。