從OO到wcf
小生是做winform出身的,最近一直想往BS方面轉,覺得WCF對我是一個好的切入點,於是看了一些wcf的資料,個人感覺,去學習一門技術,是容易的,難的是怎麼把這門技術和自己己有的知識融會貫通,我學習wcf的動機比較簡單的,先學習了wcf,把自己現的winform的系統的商務邏輯封裝在wcf,形成winform +wcf的結構,然後再著手進行BS的系統。
即
Step 1.Winform + 本地商務邏輯
Step 2.Winform + WCF
Step 3.Winform + Browser + WCF
Step 4.Browser + WCF
但是剛一開始接觸wcf ,感覺很不習慣 ,原因很簡單。
但如我有一個類。
class A{
A(String id);
void op(){};
B getB(){};
String p1{get;set;}
}
class B{
string id;
void op2();
}
在這裡,我是沒辦法直接將A轉為一個服務的,原因很簡單,如果A作為服務以後,那麼B只能作為這個一個服務的資料約來實現。
B的操作op2就實現不了。
剛開始,很不理解 ,覺得這樣設計就相當於衝突了。因為, 即使A,B都作為服務,管理起來也很混亂 。
而網上關於wcf的教程,都是實現方面的。
沒有設計方面的介紹。
自己想了一下,呵呵,達人們不要笑,這個對俺確實很難,俺得弄清楚這些的事的來龍。
覺得在真正的服務的實現中,相當於把一個類的操作和資料分開,來降低粒度和耦合,這和OO的思想是不衝突 。
在wcf中,對A,B的邏輯應該如下處理.
首先對於A,把A分解成ServiceA和DataContractA兩個類,其中ServiceA作為wcf的服務契約,而DataContractA作為資料契約
Code
class ServiceA{
DataContractA Op(DataContract A);//對應於A.op()
DataContractA GetDataContractA(string id);//對應於A的建構函式
DataContractB GetB(DataContrac A);//對應於A.getB()
}
class DataContractA{
String p1{get;set;}//對於應A的屬性p1
}
對於Class B也做類似處理。
class ServiceB{
DataContractB Op2(DataContractB b);//對應於B.op2
}
class DataContractB{
string id{get;set;}//對應於b.id
}
這樣,原來的邏輯很正常過渡到wcf服務了。
這是小弟的一些理解 ,請達人們拍磚