[c#] Convención Enum Naming - Plural


Answers

Empecé nombrando enumeraciones en plural, pero desde entonces he cambiado a singular. Parece que tiene más sentido en el contexto de dónde se usan.

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

Comparar con:

Statuses myStatus = Statuses.Ready;

Encuentro que la forma singular suena más natural en el contexto. Estamos de acuerdo en que al declarar la enumeración, que ocurre en un lugar, pensamos "este es un grupo de elementos", pero al usarlo, presumiblemente en muchos lugares, estamos pensando "esto es lo que sea" .

Question

Estoy haciendo esta pregunta a pesar de haber leído algo similar pero no exactamente lo que quiero en la convención de nomenclatura de C # para la enumeración y la propiedad correspondiente

Descubrí que tengo una tendencia a nombrar enumeraciones en plural y luego 'usarlas' como singular, por ejemplo:

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}

Por supuesto que funciona y este es mi estilo, pero ¿alguien puede encontrar un problema potencial con dicha convención? Sin embargo, tengo un nombre "feo" con la palabra "Estado":

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

Información adicional: Tal vez mi pregunta no fue lo suficientemente clara. A menudo tengo que pensar mucho al nombrar las variables de mis tipos de enum definidos. Conozco la mejor práctica, pero no ayuda a facilitar mi trabajo de nombrar esas variables.

No puedo exponer todas mis propiedades enumeradas (digamos "Estado") como "MyStatus".

Mi pregunta: ¿Alguien puede encontrar un problema potencial con mi convención descrita anteriormente? NO se trata de la mejor práctica.

Pregunta reformulada:

Bueno, supongo que debería hacer la pregunta de esta manera: ¿alguien puede presentar una buena forma genérica de nombrar el tipo de enumeración de modo que cuando se utiliza, la denominación de la 'instancia' enum sea bastante sencilla?




Este es uno de los pocos lugares en los que estoy en desacuerdo con la convención lo suficiente como para ir en contra. TBH, ODIO que la definición de una enumeración y la instancia de la misma puedan tener el mismo nombre. Postfijo todos mis Enumerados con "Enum" específicamente porque deja en claro cuál es el contexto en un uso dado. IMO hace que el código sea mucho más legible.

public enum PersonTypesEnum {
    smart,
    sad,
    funny,
    angry
}


public class Person {   
    public PersonTypesEnum PersonType {get; set;}
}

Nadie confundirá nunca lo que es la enumeración y cuál es su instancia.




Llegando un poco tarde ...

Hay una diferencia importante entre su pregunta y la que menciona (que pregunté ;-):

Pone la definición enum fuera de la clase, lo que le permite tener el mismo nombre para la enumeración y la propiedad:

public enum EntityType { 
  Type1, Type2 
} 

public class SomeClass { 
  public EntityType EntityType {get; set;} // This is legal

}

En este caso, seguiría las guías MS y usaré un nombre singular para la enumeración (plural para las banderas). Probablemente es la solución más fácil.

Mi problema (en la otra pregunta ) es cuando la enumeración se define en el alcance de la clase, lo que impide el uso de una propiedad llamada exactamente después de la enumeración.




En general, la recomendación de mejores prácticas es singular, excepto aquellas enumeraciones que tienen el atributo [Flags] asociado a ellas (y que, por lo tanto, pueden contener campos de bits), que deben ser plurales.

Después de leer su pregunta editada, me da la sensación de que puede pensar que el nombre de la propiedad o el nombre de la variable debe ser diferente del nombre del tipo de enumeración ... No es así. Lo siguiente está perfectamente bien ...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }



Related