Estoy implementando mi propia ArrayList para fines escolares, pero para darle más sabor a las cosas, estoy tratando de usar C# 4.0 Code Contracts. Todo estaba bien hasta que necesité agregar contratos a los constructores. ¿Debo agregar Contract.Ensures() en el constructor de parámetros vacío?Diseño por contratos y constructores
public ArrayList(int capacity) {
Contract.Requires(capacity > 0);
Contract.Ensures(Size == capacity);
_array = new T[capacity];
}
public ArrayList() : this(32) {
Contract.Ensures(Size == 32);
}
Yo diría que sí, cada método debe tener un contrato bien definido. Por otro lado, ¿por qué ponerlo si solo está delegando trabajo al constructor "principal"? Lógicamente, no necesitaría hacerlo.
El único punto que veo en el que sería útil definir explícitamente el contrato en ambos constructores es si en el futuro tenemos soporte de Intelisense para los contratos. Si eso sucediera, sería útil ser explícito sobre los contratos que tiene cada método, como aparecería en Intelisense.
Además, ¿hay algún libro que profundice en los principios y el uso de Design by Contracts? Una cosa es tener conocimiento de la sintaxis de cómo usar Contracts en un idioma (C#, en este caso), otra es saber cómo y cuándo usarlo. Leí varios tutoriales y el artículo C# in Depth de Jon Skeet al respecto, pero me gustaría ir un poco más profundo si es posible.
Gracias
relacionado: http://stackoverflow.com/questions/2539497/code-contracts-do-we-have-to-specify-contract-requires-statements-redundant/2626997 – porges
Puede deshacerse del "Contrato". Requiere (capacidad> 0); " si haces que el controlador haga una uint frente a un int. Intento usar Contracts como último recurso, donde el lenguaje limita tu capacidad de permitir que el siguiente desarrollador sepa lo que estabas pensando cuando creaste el código en primer lugar. Si decide mantener el contrato, escribiría "Contract.Requires (capacity> = 0);" para uno siempre debería ser capaz de construir una estructura de datos vacía, y luego tener la opción de agregar objetos más tarde. –
"... en el futuro tenemos soporte Intelisense para contratos". ¡El futuro es ahora! http://visualstudiogallery.msdn.microsoft.com/1ec7db13-3363-46c9-851f-1ce455f66970 –