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
Respuesta
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.
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 –
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.
+1, sí, según mis comentarios;) –
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
.
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. –
Estoy de acuerdo, * "está sujeto a los caprichos de quienes lo implementan" *. No tenía la intención de proporcionar asesoramiento de conformidad. – user7116
pensé posiblemente:
- externa
- desembarazaron
- simplemente 'ex' (como en 'fuera de' o 'más allá')
Para completar su lista: una alternativa a obsoleto - "Solía salir con' classNameEx', ahora estoy con 'className'": P –
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"
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.
¿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'? –
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
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
- 1. ¿Es .NET Object Creation "ex nihilo"?
- 2. un nombre de propiedad en .NET
- 3. Agregando al classpath en OSX
- 4. ¿Es posible determinar en qué idioma se escribió un ensamblado .NET ex post facto?
- 5. agregando matriz al Objeto
- 6. Para desactivar "Entrar al modo Ex" en Vim
- 7. Agregando un dataframe al final de otro data.frame en R
- 8. ¿Obtiene un tipo de datos XML de un tipo .NET?
- 9. Agregando nombre de host a/etc/hosts en Linux
- 10. Agregando Javascript de forma programada al Control de usuario en .net
- 11. Agregando días al día específico
- 12. FindFirstFile (Ex) caracteres comodín
- 13. ¿Qué es un "NOMBRE FUERTE" en .NET?
- 14. Agregando un campo personalizado al módulo de suscripción de Magento
- 15. Agregando al "constructor" de un modelo de django
- 16. Agregando campos con nombre variable a las clases de Python
- 17. Agregando una "unidad falsa" al Explorador de Windows
- 18. Emmet (ex Zen Coding) - Aptana
- 19. Vim Registro Uso en modo Ex
- 20. Agregando Java a una lista genérica de tipo desconocido
- 21. Arquitectura tipo complemento en .NET
- 22. Error al consumir servicio: el tipo de nombre 'AAA' no existe en el tipo 'YYY.YYY'
- 23. Personalización de la finalización del nombre de archivo en modo Ex
- 24. Agregando un SelectListItem predeterminado
- 25. Agregando un campo calculado en TClientDataset
- 26. El compilador de Visual C++ permite el nombre dependiente como un tipo sin "nombre de tipo"?
- 27. ¿Puedo (re) mapear comandos Ex en vim?
- 28. Detectar si el tipo de un objeto es un tipo definido por .NET Framework
- 29. ¿Cómo aplica un atributo .net a un tipo de devolución
- 30. ¿Cómo escapa correctamente un nombre de documento en .NET?
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) –
Iré con Extended, Micorosoft com también usó esta notación :) –
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