Soy un estudiante universitario (ciencias de la computación) y acabo de comenzar una clase de programación de C#. Para nuestras asignaciones, he estado usando una clase llamada "Pantalla" donde pongo cualquier salida de consola que pueda usarse varias veces a lo largo de un proyecto. Por ejemplo, una solicitud para continuar o salir del programa. En lugar de tipearlo varias veces en Main()
, solo llamo al método de la clase Display
.uso correcto de las clases?
Otro estudiante en una clase de nivel superior me ha dicho que no debería hacer esto. Que es una práctica de codificación pobre y que debería incluir todos los métodos dentro de la clase primaria (que contiene Main()
) y solo usar otra clase cuando sea absolutamente necesario.
Estoy buscando algunas sugerencias y consejos.
Me pidieron que incluyera el código. Originalmente iba a ir, pero no quería hacer esta publicación demasiado tiempo. He elegido una tarea que es bastante corta. Quiero aclarar que solo estoy aprendiendo, por lo que el código no es tan elegante como muchos de ustedes pueden escribir. La crítica constructiva es muy bienvenida.
En última instancia, estoy jugando con el uso de las clases. Sé que algunos de los métodos en la clase Display podrían ser tan fácilmente en Main().
Esta es la clase de programa que contiene Principal()
namespace Chapter_6_10
{
class Program
{
static void Main()
{
string triangle = "", result = " ";;
char printingCharacter = ' ';
int peakNumber = 0;
Display.Instructions();
Display.Continue();
// perform a do... while loop to build triangle up to peak
do
{
Console.Clear();
Request.UserInput(out printingCharacter, out peakNumber);
int counter = 1, rowCounter = 0;
do
{
do
{
triangle += printingCharacter;
rowCounter++;
}
while (rowCounter < counter);
counter++;
rowCounter = 0;
triangle += "\n";
}
while(counter != peakNumber);
// perform a do... while loop to build triangle from peak to base
do
{
do
{
triangle += printingCharacter;
rowCounter++;
}
while (rowCounter < counter);
counter--;
rowCounter = 0;
triangle += "\n";
}
while (counter != 0);
Console.Clear();
Console.WriteLine(triangle); // display triangle
Display.DoAgain(out result); // see if user wants to do another or quit
triangle = "";
}
while (result != "q");
}
}
Ésta es la clase de visualización
namespace Chapter_6_10
{
// This class displays various outputs required by program
class Display
{
// This method display the instructions for the user
public static void Instructions()
{
Console.WriteLine("\nThis program will ask you to enter a character to be used "
+ " to create triangle."
+ "\nThen you will be asked to enter a number that will represent the"
+ "\ntriangles peak."
+ "\nAfter your values have been received a triangle will be drawn.");
}
// This method displays the choice to continue
public static void Continue()
{
Console.WriteLine("\n\nPress the enter key when you are ready to continue...");
Console.ReadLine();
}
// This method displays an error message
public static void Error(string ErrorType)
{
Console.WriteLine("\nYou have entered \"{0}\", which is a value that is not valid!"
+ "\nThis is not rocket science."
+ "\n\nTry agian...", ErrorType);
}
// This method will ask user to press enter to do again or 'q' to quit
public static void DoAgain(out string Result)
{
string input = " ";
Console.WriteLine("\nPress enter to run program again"
+ "\nor type the letter 'q' to close the application.");
input = Console.ReadLine();
// convert input to lowercase so that only one test needed
Result = input.ToLower();
}
}
Ésta es la clase de solicitud
namespace Chapter_6_10
{
// This class is used to get user input
class Request
{
public static void UserInput(out char PrintingCharacter, out int PeakNumber)
{
string input = " ";
char testCharacter = ' ';
int testNumber = 0;
// a do... while loop to get Printing Character from user
// use TryParse() to test for correct input format
do
{
Console.Write("\nPlease enter a character to be used to build triangle : ");
input = Console.ReadLine();
bool result = char.TryParse(input, out testCharacter);
if (result)
{
}
else
{
Console.Clear();
Display.Error(input);
input = " ";
}
}
while (input == " ");
// a do... while loop to get number from user
// use TryParse() to test for correct input format
do
{
Console.Write("\nPlease enter a number <between 1 and 10> for the peak of the triangle : ");
input = Console.ReadLine();
bool result = int.TryParse(input, out testNumber);
if (result)
{
if ((testNumber > 0) && (testNumber < 11))
{
}
else
{
Console.Clear();
Display.Error(testNumber.ToString());
input = " ";
}
}
else
{
Console.Clear();
Display.Error(input);
input = " ";
}
}
while (input == " ");
// assigned received values to 'outs' of method
PrintingCharacter = testCharacter;
PeakNumber = testNumber;
}
}
Eso es todo. ¿Sería esto una manera ineficaz de codificar? ¿Cómo puedo mejorarlo?
Gracias por toda la información hasta ahora. Es muy valioso para mi
¿Puede compartir el código? Es más fácil comentar el código cuando realmente lo veas ... –
No voy a poner esto como una respuesta, ya que se trata más o menos a continuación, pero sí quiero decir que este otro alumno es una de las razones por las que hay tanto código malo por ahí. Enviarle este enlace a SO y deleitarse. :) –
He agregado el código de una de mis tareas, según Fredrick Mörk. Cualquier entrada sería apreciada. – subcan