Volviendo información sobre el resultado de un procesamiento de archivos, sin usar parámetros de salida [cerrados] -- # campo con object-oriented campo con .net campo con converting campo con csv camp codereview Relacionados El problema

Returning information about the result of a file processing, without using output parameters [closed]


1
vote

problema

Español
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas.

¿Quieres mejorar esta pregunta? Actualizar la pregunta por lo que es on-topic para el intercambio de pila de revisión de código.

CERRADO 6 años .

Mejorar esta pregunta

Como parte de un código C # CsvConverter que convierte varios tipos de archivos a CSV, estoy diseñando una clase privada 9988776655544331 . Mi opción de diseño actual es devolver un valor null de CsvConversionResult Si el procesamiento es exitoso.

¿Qué puedo agregar o eliminar de mi diseño para usar "mejores prácticas"? Los tipos de datos primitivos que regresan están fuera de discusión, ya que quiero devolver más de una cosa.

  public static class CsvConverter {     public class CsvConverterError     {           public string Message { get; set; }         public int LineNumber { get; set; }         public string FileName { get; set; }          public CsvConverterError(string message, int lineNumber, string fileName)         {             Message = message;             LineNumber = lineNumber;             FileName = fileName;         }     }      // returns null if successful     public static CsvConverterError WriteCsvRowsToFile(char delimiter,                                                   string inputFilePath,                                                   string outputFilePath,                                                   string qualifier = "")     {         CsvConverterError error = null;          /* Some code here that sets the value of error accordingly */          return error;     }   
Original en ingles

As part of a C# class CsvConverter that converts various file types to CSV, I am designing a private class CsvConversionResult. My current design choice is to return a null value of CsvConversionResult if processing is successful.

What can I add to or remove from my design to use "best practices"? Returning primitive data types is out of the question since I want to return more than one thing.

public static class CsvConverter {     public class CsvConverterError     {           public string Message { get; set; }         public int LineNumber { get; set; }         public string FileName { get; set; }          public CsvConverterError(string message, int lineNumber, string fileName)         {             Message = message;             LineNumber = lineNumber;             FileName = fileName;         }     }      // returns null if successful     public static CsvConverterError WriteCsvRowsToFile(char delimiter,                                                   string inputFilePath,                                                   string outputFilePath,                                                   string qualifier = "")     {         CsvConverterError error = null;          /* Some code here that sets the value of error accordingly */          return error;     } 
              
         
         

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Como señaló que uno de los comentaristas señaló, agregar una bandera booleana a su resultado es una de las mejores formas de volverse un resultado exitoso, especialmente en comparación con la NULL de regreso. De hecho, tengo una envoltura alrededor de un objeto de resultados de búsqueda donde hago exactamente esto en el código para mi proyecto actual.

"NULL" me hace pensar en "algo malo".

Esta es exactamente la razón por la que NULL no debe utilizarse para esta situación. En el peor de los casos, tendrá un programador que esté totalmente confundido acerca de lo que está sucediendo en su código, ya que la mayoría de las personas no regresarán null de una función, especialmente para completar con éxito ese código.

Este es el código que uso:

  public class SearchMemberEligibilityWrapper {     public List<RegularMember> ResultList { get; set; }     public int ResultCount { get; set; }     public bool ResultSuccessful { get; set; }     public SearchType ResultSource { get; set; }     public string ResultError { get; set; }      public SearchMemberEligibilityWrapper()     {         this.ResultList = new List<RegularMember>();         this.ResultCount = 0;         this.ResultSuccessful = false;         this.ResultSource = SearchType.Default;         this.ResultError = string.Empty;     }      public enum SearchType     {         Default,         QNXT,         Database,         Historical     } }   

Luego, el código que utiliza las verificaciones de SOBREAMBERELIGIBLEWRAPPER para obtener el valor de los resultados, decidir qué hacer después del intento de búsqueda. Tiene tres estados que el resultado de la búsqueda puede existir en:

  • Buscar sin éxito (error)
  • búsqueda exitosa, 0 resultados
  • búsqueda exitosa, & gt; 0 resultados

Si le preocupa tener múltiples errores por archivo, luego use este patrón, incluso puede tener una propiedad 9988777665555443311 para sus errores, y enumere sus errores individualmente, en lugar de simplemente tener un error para todo.

 

As one of the commenters pointed out, adding a boolean flag to your result is one of the better ways to go about returning a successful result, especially when compared to returning null. In fact, I have a wrapper around a search result object where I do exactly this in the code for my current project.

"null" makes me think of "something wrong".

This is exactly why null should not be used for this situation. At worst you'll have a programmer later who is totally confused about what is going on in your code, as most people will not return null from a function, especially for successful completion of that code.

This is the code I use:

public class SearchMemberEligibilityWrapper {     public List<RegularMember> ResultList { get; set; }     public int ResultCount { get; set; }     public bool ResultSuccessful { get; set; }     public SearchType ResultSource { get; set; }     public string ResultError { get; set; }      public SearchMemberEligibilityWrapper()     {         this.ResultList = new List<RegularMember>();         this.ResultCount = 0;         this.ResultSuccessful = false;         this.ResultSource = SearchType.Default;         this.ResultError = string.Empty;     }      public enum SearchType     {         Default,         QNXT,         Database,         Historical     } } 

Then the code that uses the SearchMemberEligibilityWrapper checks for the value of ResultSuccessful to decide what to do after the search attempt. You have three states that the search result can exist in:

  • Search unsuccessful (error)
  • Search successful, 0 results
  • Search successful, >0 results

If you're concerned about having multiple errors per file, then using this pattern you can even have a List<string> property for your errors, and list your errors individually, rather than simply having one error for everything.

 
 

Relacionados problema

4  73 líneas de mayhem - analizar, ordenar y guardar en CSV en PHP CLI  ( 73 lines of mayhem parse sort and save to csv in php cli ) 
Dentro de una carpeta llamada dispatch_sync(dispatch_get_main_queue(), ^{1 Tengo 138 archivos de texto (un total de 349 MB) lleno de direcciones de correo e...

6  Herramientas de línea de comandos para formatear tablas  ( Command line tools to format tables ) 
Soy un gran fanático de un revestimiento usando sed awk 9988777665544332 y otras herramientas. Pero hay cosas difíciles de hacer en una sola línea, como...

3  Determinar los promedios de columnas  ( Determine column averages ) 
Estoy tratando de escribir código de TERSE PERL para calcular el promedio de cada columna en un archivo. El archivo puede tener & gt; = 1 columnas. use str...

4  Vectorizamos la prueba exacta de Fisher  ( Vectorize fishers exact test ) 
Tengo dos marcos de datos / listas de datos, humanSplit 9988776655544331 , y son del formulario > ratSplit$Kidney_F_GSM1328570 ratGene ratRepli...

5  Analice un archivo CSV y devuelva un objeto o matriz  ( Parse a csv file and return an object or array ) 
Recientemente publiqué un módulo de JavaScript para NPM que también está disponible on Github por el nombre de Rawiki-Pars-CSV. El código lleva datos RAW C...

3  Cómo pedir a un usuario a guardar y regenerar algunas entradas en un archivo  ( Prompting a user to save and regenerate some entries in a file ) 
Quiero eliminar mi goto en este código, pero no estoy seguro de cómo. Debe haber una forma más limpia de escribir mi código. Tal vez mueva la declaración "IF"...

7  La forma más rápida de escribir un archivo CSV grande en Python  ( Fastest way to write large csv file in python ) 
Soy bastante nuevo para Python y Pandas, pero tratando de mejorar con él para analizar y procesar archivos de datos grandes. Actualmente estoy trabajando en u...

24  Generando cuerdas CSV para varias utilidades de terceros  ( Generating csv strings for various 3rd party utilities ) 
Estoy generando cuerdas de CSV para varias utilidades de terceros y esta sección del código se repite en muchas clases. ¿Hay una mejor manera de generar esta ...

8  Python CSV a XML Converter  ( Python csv to xml converter ) 
Estoy creando una aplicación que se lee en los datos de un archivo CSV y crea un archivo XML usando LXML. El siguiente código funciona como se esperaba. Sin e...

1  Copiando CSV a SQL_Table  ( Copying csv to sql table ) 
Escribí el código que lleva CSV y expórtelo a la tabla SQL. Parece esto: output_leftBound()1 Este método creará una tabla basada en la variable de nombr...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos