2010-06-23 116 views
12

我在StackOverflow和其他地方談論過很多具體實現。雖然與WCF擺弄我通過線什麼是具體實現?

搭售服務實現,或 任何「基於服務」類的 具體的實現絕不是 好主意來了。

任何人都可以解釋具體實現是什麼?

+0

我會建議讀鮑勃叔叔的文章在固體原則上:http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod我認爲它會幫助你理解什麼編碼具體實現意味着什麼,爲什麼它是一個壞主意。 – 2010-06-23 11:28:47

回答

10

它是抽象類(抽象類,接口)的實現。 請注意,您只能實例化具體類的對象。

只是舉例來說,如果你有:

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

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

在WCF的情況下,它想說的是,雖然它被允許使用的ServiceContract標記類屬性最好是有它獨立的接口和實施具體該接口類標有ServiceBehavior屬性。

像這樣:

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

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

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

如果你有一個接口或抽象類,它需要實現。

實現這種接口或類的類稱爲具體實現(因爲只有這樣的實現類可以實例化)。

上述原則意味着您不應該直接對具體實現進行編碼,因爲您可能希望在以後更換另一個具體實現而不更改代碼。這意味着你應該使用接口和抽象類的引用,而不是具體的實現。

2

在術語 「具體實施」, 「混凝土」 字是多餘的。一個實現總是具體的,沒有抽象的實現。所以,重要的是「實施」這個詞。

在這種情況下,它意味着你應該對抽象進行編碼,而不是直接對實現進行編碼,即爲類定義接口,並使用接口而不是類。這樣,只要他們實現了接口,就可以用一種實現替代另一種實現。

+2

將實現接口的抽象類視爲零實現或半實現? – icelava 2010-06-23 09:51:44

+0

@icelava:抽象類作爲整體是抽象的,即使它包含接口的完整實現。將類標記爲抽象只會阻止它被實例化,但並不禁止實現內容。抽象類不一定是完全抽象的,就像一個接口一樣。在這個意義上,'abstract'關鍵字可能有點誤導,相當於VB的關鍵字'MustInherit'實際上是一個更精確的術語。 – Guffa 2010-06-23 11:32:09

0

我終於明白,從頭第一個「設計模式」書。

非常簡單的解釋。

想象有接口或稱爲動物用makeSound()方法抽象類。

想象也有狗類樹皮()和makeSound()方法。

編程來實現(具體實現)狗類動物會

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

面向接口編程/超狗類動物會

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