2010-06-23 28 views
12

Vi muchas publicaciones en StackOverflow y en otros lugares hablando sobre la implementación concreta. Si bien jugando con WCF que llegué a través de la línea de¿Qué es una implementación concreta?

Atar su implementación del servicio, o cualquier “servicio basado en” clase a una aplicación concreta nunca es una buena idea .

¿Alguien puede explicar qué es la Implementación concreta?

+0

Yo recomiendo la lectura de artículos de tío Bob en principios SOLID: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod Creo que le ayudará a comprender qué significa codificación para implementaciones concretas y por qué es una mala idea. –

Respuesta

10

Es la implementación de algo abstracto (clase abstracta, interfaz). Tenga en cuenta que solo puede crear instancias de objetos de clases concretas.

Así por ejemplo, si usted tiene:

abstract class AbstractClass 
{ 
    ....... 
    // Here you have some abstract methods 
} 

class ConcreteClass : AbstractClass 
{ 
....... 
} 

En caso de WCF que quiere decir que a pesar de que se le permite marcar las clases con ServiceContract atribuir mejor tenerlo en comunicación separado y poner en práctica dicha interfaz en concreto clase marcada con el atributo ServiceBehavior.

De esta manera:

[ServiceContract(Namespace = "MyNamespaceName")] 
interface IMyInterface 
{ 
    [OperationContract] 
    int SomeMethod(.....); 

    ......  
    ......  
} 

[ServiceBehavior(......)] 
public class SomethingConcrete : IMyInterface 
{ 
    // implementation of SomeMethod 
} 
4

Si tiene una interfaz o clase abstracta, debe implementarse.

Una clase que implementa dicha interfaz o clase se denomina implementación concreta (porque solo se puede crear una instancia de dicha clase implementada).

El principio indicado significa que no debe codificar directamente contra la implementación concreta, ya que es posible que desee cambiarlo por otra implementación concreta en un momento posterior sin cambiar su código. Esto significa que debe usar referencias de clase abstracta y de interfaz en lugar de implementaciones concretas.

2

En el término "aplicación concreta", la palabra "concreto" es redundante. Una implementación es siempre concreta, no hay una implementación abstracta. Entonces, lo importante es solo el término "implementación".

Lo que significa en este caso es que debe codificar contra una abstracción en lugar de directamente contra una implementación, es decir, define una interfaz para lo que las clases deben admitir y utiliza la interfaz en lugar de la clase. De esta forma, puede sustituir una implementación por otra siempre que implementen la interfaz.

+2

¿una clase abstracta que implementa una interfaz se consideraría implementación cero o media implementación? – icelava

+0

@icelava: La clase abstracta en su conjunto es abstracta, incluso si contiene una implementación completa para la interfaz. Marcar una clase como abstracta solo evita que se cree una instancia, no impide que el contenido se implemente. Una clase abstracta no tiene que ser totalmente abstracta, como lo es una interfaz. La palabra clave 'abstracta' puede ser algo engañosa en ese sentido, la palabra clave VB equivalente' MustInherit' es en realidad un término más preciso. – Guffa

0

Finalmente lo entendí de Head First "Design Pattern" Book.

Explicación muy simple.

Imagine que hay una interfaz o clase abstracta llamada Animal con el método makeSound().

Imagínese que también existe la clase Dog con los métodos bark() y makeSound().

programación a una aplicación (aplicación concreta) clase Perro animal sería

Dog d = new Dog(); 
d.bark(); 

programación a una interfaz/supertipo clase Perro animal sería

Animal animal = new Dog(); 
animal.makeSound(); 
Cuestiones relacionadas