2011-12-21 8 views
9

He notado un patrón recientemente en nuestra base de código en el trabajo, donde la mayoría de nuestra clase de modelo tiene un nombre como Usuario, y hay un tipo heredado que tiene un extra campos en él llamados UserEx. También he notado esto en C# async CTP donde ponen los métodos estáticos adicionales para Tarea en una clase llamada TaskEx (debido a restricciones técnicas, ya que no podían alterar la biblioteca existente). Hablando con alguien en el trabajo, aprendí que existen clases EX para optimizar las transferencias de red (puede obtener solo lo mínimo si lo necesita). Mi pregunta, entonces, es qué significa -Ex? Lo único que puedo pensar es posiblemente "Extra".Agregando -Ex al nombre de un tipo en .Net

+0

También podría ser "extensión" - y con un poco de búsqueda en este foro: http://stackoverflow.com/questions/3963374/what-does-it-mean-when-ex-is-added-to-a -function-method-name (aunque esto es para la API de Windows, supongo que las personas han estado usando la convención de nomenclatura desde) –

+0

Iré con Extended, Micorosoft com también usó esta notación :) –

+0

Probablemente sea parte de su convención de nomenclatura por ejemplo, en el trabajo quieren que prefijáramos cualquier clase que escribamos como clsSomeClasee.cs tiene sentido – MethodMan

Respuesta

17

Las otras respuestas que obtuvimos correcta: la Ex sufijo significa "extendida". Es una forma de introducir una nueva clase o método sin obsolestar o eliminar el anterior, una forma común de mantener la compatibilidad con versiones anteriores al presentar nuevas funciones.

La API de Windows hace esto por todos lados, como se explica en here.

Hans alude al problema con este enfoque en su explicación: no escala. ¿Qué sucede si desea extender una función "extendida"? ¿Lo llamas FunctionExEx? Eso se ve estúpido.

Tan estúpido, de hecho, que las propias pautas de codificación de Microsoft para .NET (aunque subjetivas) specifically recommend against appending Ex to a type.En cambio, si debe hacer esto, usted debe utilizar un número:

MyType 
MyType2 // modified version 
MyType3 // oh wait, we had to modify it again! 

culpar esto en una mala planificación como dowhilefor trata de hacer es un poco prematuro. Al escribir aplicaciones y marcos del mundo real, a menudo necesita enviar. Eso significa sacar una versión rápida y sucia de la función que funciona. Más tarde, usted decide que este es un diseño pobre y algo necesita cambiar. En lugar de levantar las manos y reescribir por completo (produciendo demoras enormes y obsoletando todo el código anterior), introduce un nuevo tipo con un nombre diferente. La retrospección es siempre 20/20.

+0

Great post. Por cierto, 20/20 es una visión normal, la retrospectiva probablemente le da mucho más de lo que es la visión normal - https://answers.yahoo.com/question/index?qid=20080215115045AATahKe –

2

Significa "Extensión" o "Extendido", hasta donde yo sé. Es un sufijo común para cuando necesita agregar funcionalidad a algo que no puede cambiar. Un buen ejemplo fueron las diversas funciones -Ex en las API de Win32, que se agregaron porque C no admite la sobrecarga de funciones.

+0

+1, sí, según mis comentarios;) –

5

Finalizar una nueva clase o método o escribir en Ex es una convención de nomenclatura, y como cualquier convención de nomenclatura, está sujeta a los caprichos de quienes la implementan.

No hay reglas duras y rápidas, y que no es más o menos correcta de anexar 2 hasta el final de la clase (o Extra, o More o DidntWantToMessWithThePublicApi).

En cuanto a por qué se utiliza, Microsoft tiene un largo historial de uso para proporcionar una revisión de una API existente sin romper el código anterior. Puede encontrar ejemplos de este in classes, in methods y in structures. También puede encontrar diferentes ejemplos, which instead use 2.

+1

Tenga en cuenta que el equipo de .NET ya no lo hace/recomienda, en parte debido a los problemas experimentados por el equipo de Win32. Simplemente no escala en caso de que desee "extender" algo dos o tres veces. –

+1

Estoy de acuerdo, * "está sujeto a los caprichos de quienes lo implementan" *. No tenía la intención de proporcionar asesoramiento de conformidad. – user7116

0

pensé posiblemente:

  • externa
  • desembarazaron
  • simplemente 'ex' (como en 'fuera de' o 'más allá')
+0

Para completar su lista: una alternativa a obsoleto - "Solía ​​salir con' classNameEx', ahora estoy con 'className'": P –

0

honestamente, yo creo que significa "No planeamos esta función el tiempo suficiente, no pensamos en los requisitos modificados, y tenemos que lidiar con esto ahora cerca de la fecha límite". Por supuesto, este no es siempre el caso, pero cada vez que encuentro una clase con Ex, intento descubrir por qué se introdujo y no se agregó correctamente al marco. Para mí es casi como // HACK: Esto solo cuenta para nuestro código, si está en un marco, "espero" solo nombrar convención. lo que podría significar que ya fue respondida, mi suposición era siempre "ampliados"

1

Esta práctica NO es estándar de la industria. Admitiré que lo hago yo mismo, pero en su mayoría es una emulación vestigial de algunas de las viejas funciones del kernel win32. por ejemplo, inicialmente tenían una función C "beginthread" y más tarde crearon otra "begintreadEx" nueva y mejorada.

Sugiero que empiece a usar el atributo [Deprecated] para indicar a otros codificadores (oa usted mismo) que deje de usar la función anterior a favor de la nueva. Eso tiene un significado más intrínseco.

Larga historia corta - debe nombrar clases & funciones sobre la base de lo que son o lo hacen, y tratar de evitar los prefijos/sufijos seudo-significativa que crean confusión como este. Ese es el enfoque estándar de la industria.

+0

¿Qué sucede si las dos funciones * son * y * do * [básicamente] lo mismo? Adjuntar algo hasta el final es una forma bastante auto-documentada de indicar que una es una versión extendida o modificada de la primera. Los sufijos no tienen sentido en contexto. ¿Cómo llamarías 'BeginThreadEx'? –

+0

La mayoría de las veces en C# puede mantener el nombre del método existente y simplemente crear una nueva sobrecarga (con diferentes parámetros). – Polyfun

+0

me gusta BeginThreadEx ya que al menos era coherente con las otras funciones del kernel win32. Quise decir lo que dije como una guía, no una regla dura. No creo que haya una receta que pueda seguir para nombrar siempre bien las funciones, no hay sustituto para pensar particularmente en su función particular, y reconocer que ser coherente (incluso si no es un estándar de la industria) tiene mucho valor. – AlanR

Cuestiones relacionadas