【求助】小系统组成大系统所遇到的问题
??? 以下只是舉例!
?
環(huán)境:
??? 1,通用實(shí)體庫CommonEntity,里面有管理員類
class Administrator<TEntity> : Entity<TEntity>, IAdministrator where TEntity:Administrator<TEntity>{
static TEntity Login(String username, String password);
static IAdministator FindByID(Int32 id);
static IAdministator FindByName(String name);
}
??????? 這是一個(gè)泛型類,然后有個(gè)默認(rèn)的管理員類
class Administrator:Administrator<Administrator>{}
??????? 可別暈了,尖括號(hào)里面的Administrator就是左邊的那個(gè)類,而尖括號(hào)前那個(gè),是上面那個(gè)泛型類。上面可以看到,我們還有一個(gè)IAdministator接口。
?
??? 2,請假模塊。業(yè)務(wù)邏輯部分針對IAdministrator編程,因?yàn)椴恢雷罱K類型,沒辦法利用Administrator<TEntity>進(jìn)行編碼。
??? 3,出差模塊。同上,只對IAdministator進(jìn)行編碼。
?
??? 4,最終項(xiàng)目。它要擴(kuò)展管理員類,于是有
class Admin:Administrator<Admin>{
public String Address{get;set;}
}
??????? 這個(gè)擴(kuò)展的管理員類,多了一個(gè)地址Address字段。
??????? 這個(gè)時(shí)候,需要把請假模塊和出差模塊集成進(jìn)來,而這兩個(gè)模塊,根本不需要關(guān)心擴(kuò)展的Address字段,因?yàn)樗鼈冎恍枰玫交惱锩娴哪切┳侄魏头椒ň妥銐蛄?#xff0c;但是那兩個(gè)模塊里面用的是IAdministator接口所代表的對象,必須是最終擴(kuò)展的這個(gè)Admin類,而不是通用實(shí)體庫CommonEntity里面的Administrator,否則會(huì)出很大的問題,例如它們倆是不同的數(shù)據(jù)表。
?
現(xiàn)狀:
??? 1,目前采用的方法。請假和出差模塊使用Administrator類(不是泛型那個(gè)),如IAdministator admin=Administrator.FindByID(123)。這個(gè)FindByID里面,讀取配置文件,得知真正的管理員類是Admin,然后反射調(diào)用它的方法,所以最終得到的admin實(shí)際上是Admin的實(shí)例,而不是Administator的。
??? 2,上面的方法解決了問題,但是還有很多問題。管理員類只是一個(gè)例子,還有很多其它的類需要這樣做,都這樣子使用配置,最后統(tǒng)一起來,就會(huì)奇臭無比。
??? 3,假如還有一個(gè)模塊,考勤模塊,需要用到請假和出差,然后它又要擴(kuò)展請假和出差……(你懂的!)
?
求助:
??? 求一個(gè)漂亮的解決方案!
轉(zhuǎn)載于:https://www.cnblogs.com/nnhy/archive/2011/07/26/2117054.html
總結(jié)
以上是生活随笔為你收集整理的【求助】小系统组成大系统所遇到的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate映射关系总结篇
- 下一篇: 教会你Linux Shell自动交互的三