Suggerirei di memorizzare la struttura dei menu in una struttura di dati gerarchica:
//C# sample
//You can replace the object initializers with constructors in the class,
//In C# 6.0, you can also create an Add extension method taking three parameters, for use with the collection initializer
// https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6#extension-add-methods-in-collection-initializers
class MenuEntry {
public string Title {get;set;}
public Action Action {get;set;}
public List<MenuEntry> Subentries {get;set;}
}
var entries = new List<MenuEntry> {
new MenuEntry() {Title = "TopLevel1", Subentries = new List<MenuEntry>() {
new MenuEntry() {Title = "SecondLevel1", Action = () => SecondLevel1()},
new MenuEntry() {Title = "SecondLevel2", Action = () => SecondLevel2()}
},
new MenuEntry() {Title = "TopLevel2", Subentries = new List<MenuEntry>() {
new MenuEntry() {Title = "SecondLevel3", Action = () => SecondLevel3()},
new MenuEntry() {Title = "SecondLevel4", Action = () => SecondLevel4()}
}
}
Quindi tutto ciò di cui hai bisogno è una singola funzione ricorsiva per rendere ogni MenuEntry
all'elemento UI corrispondente e connettere Action
a quell'elemento.
A parità di tutti gli altri, è più semplice raggruppare i metodi chiamati ( SecondLevel1
, SecondLevel2
) insieme, nella stessa classe del metodo main
, o in una classe statica separata per tutti questi metodi. Tuttavia, potrebbe essere più appropriato mantenere alcuni o tutti i singoli metodi insieme alle parti appropriate della domanda: ad es. un metodo StartNewGame
potrebbe appartenere alla classe Game
.