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