c#-4.0 - diseño por contrato java
Diseño por contrato/C#4.0/evitando ArgumentNullException (5)
No estoy seguro acerca de las construcciones nativas de DbC en C # 4.0, pero Microsoft lanzará una biblioteca de contratos en varios idiomas.
Puede descargar la versión para MSVS2008 aquí .
Estoy terriblemente cansado de comprobar todos mis argumentos para null, y arrojar ArgumenutNullExceptions cuando lo son.
Según lo entiendo, C # 4.0 permite algunos diseños por construcciones contractuales. ¿Será posible especificar que un método no aceptará argumentos nulos en C # 4.0?
Además, ¿hay algo que pueda hacer mientras tanto (tal vez un atributo?) Para evitar esta tarea monótona de verificar nulo y arrojar?
Como alternativa a las respuestas ya dadas, vale la pena investigar el Null Object design pattern
.
La esencia de este patrón de diseño es que una vez que se crea el "objeto nulo", ya no es necesario realizar ninguna comprobación de nulo y los métodos del objeto nulo implementan el comportamiento deseado cada vez que se haya emitido un nulo (de lo contrario) una referencia a un "objeto real".
Este patrón de diseño no depende de C # 4.0 y, de hecho, se puede implementar fácilmente en casi cualquier lenguaje de programación OO .
Puede crear una clase genérica NotNull<T>
que ayude, pero hay algunos efectos secundarios. Ver la publicación de blog de Robert Nystrom .
Acabo de empezar a usar Contratos de código es una nueva característica en C # 4.0 que necesita descargar un complemento de MS para que pueda verlo en la configuración de su proyecto. Detalles aquí -> http://research.microsoft.com/en-us/projects/contracts/
Rick Brewster describe una buena solución para la comprobación de parámetros de estilo conciso y declarativo en esta publicación,
http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/
Evita el uso de la reflexión (inconveniente de DbC) y no crea sobrecarga para una ruta de código no excepcional.
Me gusta cómo usa los métodos de extensión para permitir lo que parece ser una llamada de método de instancia en objetos nulos. Muy inteligente de codificación de IMO.
Si se vende en DbC, Google Spec # y PostSharp.