一直覺得,簡單也是一種美,架構如此,做人亦如此;重劍無鋒,真水無香
強烈建議配合**閱讀本文,畢竟**才是程式設計師最好的交流方式
之前的文章分析了系統,並畫出了架構草圖,詳情請見《一步一步搭架子(分析篇)》
關於modelbase層與model層的實現,因為很簡單,就不再贅述了,直接上**即可。關於model繼承的思路,請見:《我們該如何設計資料庫(三)(續)》
modelbase**:
namespacemodelbase
}public
class
teacherbase : identifier
[stringlength(
50)]
public
string pwd
}public
class
contactbase : identifier
[stringlength(
50)]
public
string phone
[stringlength(
50)]
public
string email
}}
可以看到,資料在這一層是還沒有組合在一起的;然後是model**(假設現在是提供給a學校的):
namespacemodel.a
[stringlength(
50)]
public
string lastname
public contact contact
}public
class
contact : contactbase
}}
請注意,這裡用model.a的命名空間來區分了model。如果是b學校的model,要這樣寫:
namespacemodel.b
}public
class
contact : contactbase
}
可以看到,a學校和b學校model的命名都是teacher 和contact ,用不同的命名空間來加以區分
再然後是dbcontext的實現:
usingsystem.data.entity;
using
model.a;
namespace
dbaccess.a
public dbsetteacher
public dbsetcontact
protected
override
void
onmodelcreating(dbmodelbuilder modelbuilder)
}}
然後就是系統中的難點:factory的設計
一開始,我覺得這個就是抽象工廠模式所描述的應用場景:同類產品不同產品族的開發
但是在實際開發過程中,卻發現抽象工廠無法滿足需要。抽象工廠要求子類從基類派生,這點我們的model是由modelbase派生的,滿足條件;但是我們不同的model還有自己獨有的get/set方法,而這些獨有的方法是無法通過抽象工廠完成的
簡單的反射也無法滿足要求。反射出來的是乙個object型別,要通過as關鍵字轉換之後才能使用,如:
object obj = assembly.load("").createinstance(""); //假設這裡反射出乙個teacher
teacher teacher = obj as teacher; //
還要as之後才能使用
我在這個問題上耗費了乙個星期多的時間,直到有一天,靈感突現:可以使用預編譯指令來實現namespace的切換
#define a#if b
using
model.b;
using
dbaccess.b;
#endif
#if a
using
model.a;
using
dbaccess.a;
#endif
這樣的話,我們切換model,只需將#define a改為#define b
factory的具體實現如下:
#region namespace#define a
#if b
using
model.b;
using
dbaccess.b;
#endif
#if a
using
model.a;
using
dbaccess.a;
#endif
#endregion
using
system.collections.generic;
namespace
factory
public
static
contact getcontact()
}public
class
modellistfactory
public
static ilistgetcontactlist()
}public
class
contextfactory
}}
這樣弄出來的factory,如其名字一樣,用了最簡單的工廠模式來實現
就此擱筆
ps:變天了,各位園友記得防寒保暖 :)
一步一步搭架子(分析篇)
寫下這篇部落格,主要是想和大家分享我的思路以及碰到的問題 作為開篇,我打算和您分享如下內容 分析系統,技術的選擇,系統初步構架圖 話不多少,進入正文 假設現在要實現乙個學校登記所有教師資訊的系統。系統功能十分簡單 對教師資訊的增刪改查。我們幾乎是立即設計出了這樣兩張表 為了增加一點複雜度,這裡將te...
一步一步搭架子(完結篇)
如果您是初次閱讀這個系列,請先去 index writing plan 查詢並閱讀 架構設計系列 的前兩篇文章,順序閱讀會使您有更好的閱讀體驗 正文開始 controller其實就是接收service處理過的資料,並且呈現給頁面 因為業務邏輯已經在service中處理過了,所以controller無...
一步一步 Sql Azure
一步一步 sql azure 1.使用 windowsazure 平台賬號登陸 2.新建sqlazure server 3.新建資料庫 4.為sql azure server 新增防火牆規則,只有將本機新增到規則裡才能從本機連線到該sqlazure server 5.連線到sql azure ser...