myThread est une fonction qui s'exécute toutes les secondes, elle lit essentiellement certaines données qui doivent être analysées et exécutées. La fonction a beaucoup progressé et il y a plus de 1500 lignes de code comme l'exemple ci-dessous avec beaucoup de [sinon else else] bloque beaucoup de répétitions comme sleep ou SendToChat pour envoyer une commande à la console, et c'est très difficile à maintenir , apportez des modifications, etc. Je voudrais quelques conseils (si possible avec des exemples de code, cela m'aiderait à comprendre la disposition) sur la façon dont je pourrais réécrire cela, je ne suis pas très expérimenté donc je ne suis pas si sûr des possibilités de transformer ce code en un meilleur code pour la maintenabilité et la lisibilité?Comment pourrais-je organiser ce code?
De même, n'hésitez pas à commenter les fonctions ou toute autre chose, car cela pourrait m'aider à améliorer d'autres choses qui ne vont pas.
Ceci est juste un échantillon du code et pas tout le code si vous sentez que vous avez besoin d'autres informations du code n'hésitez pas à demander et je posterai une fois que je peux.
PS: ce n'est pas une chose irc.
private void myThread()
{
while(isRunning)
{
// SOME PARSED DATA HERE
// if (parsedData matchs) do the below stuff
Messages received = new Messages
{
Sent = Convert.ToDateTime(match.Groups[1].Value),
Username = match.Groups[3].Value,
MessageType = (match.Groups[2].Length > 0) ? MsgType.System : MsgType.Chat,
Message = match.Groups[4].Value.Trim(),
CommandArgs = match.Groups[4].Value.ToLower().Trim().Split(' ')
};
// Get the user that issued the command
User user = usersList.Find(x => x.Name == recebe.received.ToLower());
if (user != null)
{
// different greetings based on acess level
if (received.Message == "has entered this room")
{
if (User == null)
{
SendToChat("/w " + received.Username + " " + received.Username + " you have no registration.");
Thread.Sleep(1000);
SendToChat("/kick " + received.Username + " not registered.");
Thread.Sleep(1000);
}
else
{
string cmd = (user.Access < Access.Vouch) ?
"/ann " + user.Access.ToString() + " <" + received.Username + "> has entered the room." :
"/w " + received.Username + " " + received.Username + " welcome to our room !";
SendToChat(cmd);
Thread.Sleep(1000);
}
}
// Here we filter all messages that start with a . which means it is a command
else if (received.Message.StartsWith(".") && user != null)
{
// here we verify if the user has Access to use the typed command and/or if the command exists
if (accessList.Exists(x => x.Access == user.Access && x.HasCommand(received.CommandArgs[0])))
{
if (received.CommandArgs[0] == ".say")
{
SendToChat("/ann " + received.Username + " says: " + received.Message.Substring(received.CommandArgs[0].Length + 1));
Thread.Sleep(1000);
}
else if (received.CommandArgs[0] == ".command")
{
string allowedList = string.Empty;
int count = 0;
foreach (string cmd in listaAccesss.Find(x => x.Access == user.Access).Command)
{
if (count == 0)
allowedList += cmd;
else
allowedList += ", " + cmd;
}
SendToChat("/w " + received.Username + " " + received.Username + " you are allowed to use the followed commands: " + permite);
Thread.Sleep(1000);
}
else if (received.CommandArgs[0] == ".vip")
{
if (received.Command.Count() < 2)
{
SendToChat("/w " + received.Username + " " + received.Username + ", see an example of how to use this command: .vip jonh");
Thread.Sleep(1000);
}
else if (received.Command.Count() == 2)
{
var target = usersList.Find(x => x.Name == received.CommandArgs[1]);
if (target == null)
{
User newUser = new User
{
Name = received.CommandArgs[1].ToLower(),
Access = Access.VIP,
Registered = DateTime.Now,
RegisteredBy = received.Username.ToLower()
};
usersList.Add(newUser);
SendToChat("/ann " + user.Access.ToString() + " " + user.Name + " has promoted " + received.CommandArgs[1] + " to VIP.");
Thread.Sleep(1000);
}
else if (target != null && target.Access == Access.VIP)
{
SendToChat("/w " + received.Username + " " + received.Username + " the user " + target.Name + " already have VIP access.");
Thread.Sleep(1000);
}
else if (target != null && user.Access == Access.HeadAdmin && user.Access < target.Access)
{
Access last = target.Access;
target.Access = Access.Vouch;
SendToChat("/ann " + user.Access.ToString() + " " + received.Username + " promoted/demoted the " + last.ToString() + " " + target.Name + " to VIP.");
Thread.Sleep(1000);
}
else if (target != null && target.Access == Access.Vouch)
{
target.Access = Access.VIP;
target.RegisteredBy = user.Name;
SendToChat("/ann " + user.Access.ToString() + " " + received.Username + " promoted the vouch of " + target.Name + " to VIP.");
Thread.Sleep(1000);
}
else
{
SendToChat("/w " + received.Username + " " + received.Username + " you can't register or modify the user " + received.CommandArgs[1] + ".");
Thread.Sleep(1000);
}
}
}
}
else
{
SendToChat("/w " + received.Username + " " + received.Username + " command not found.");
Thread.Sleep(1000);
}
}
}
Thread.Sleep(1000);
}
}
Vous pouvez le faire remarquer sur http://codereview.stackexchange.com – carlosfigueira
@carlosfigueira Je pense que ma question s'intègre ici aussi bien que je ne cherche pas seulement des conseils, des suggestions mais je cherche aussi le codage potentiel exemples qu'un membre de la communauté pourrait être intéressé à montrer pour m'aider dans mon apprentissage et je suis sûr que de nombreux utilisateurs ont vécu cette expérience une fois, mais je garderai à l'esprit codereview je n'étais pas au courant .. – Guapo
-topique selon la FAQ. Ce n'est pas "un problème de programmation spécifique", et "chaque réponse est également valable". Il y a aussi un site stackexchange beaucoup plus sur le sujet, comme l'a mentionné carlosfigueira. –