目前,軟體分層的思想已經得到普及,在我所做過的項目中也得到了很好的效果。但是也有明顯的缺點,應付從下而上的變化時,往往需要級連修改,尤其是資料庫結構發生變化,另外如果採用了NHibernate之類ORM平台,這方面好好一些。
在複雜的商務邏輯層,往往對象的粒度很小,在表現層使用起來不太方便,會產生重複代碼(例如常規的初始化,資料訪問數等),加大了表現層開發人員的學習難度和開發工作量。此時往往是為商務邏輯層增加服務層(封裝層),減少重複代碼和不必要的複雜度。
增加服務層的缺點也是明顯的:減少了靈活性。
本例使用了服務層封裝商務邏輯,簡化了表現層開發。服務層封裝類需要資料庫連接參數等,為此將採用單件模式,使用靜態屬性進一步封裝服務層對象,並考慮了多線程的情景。這種情況下,以後服務層介面的變更僅需要修改服務層封裝類。
// 服務層封裝類
public class MyUserService
{
public MyUserService(string strConn)
{
// ......
}
// ......
}
......
public class BusinewwWapper
{
private static MyUserService m_User;
private static string m_StrConn;
static BusinewwWapper()
{
// 必要的初始化
m_StrConn =......;
}
private static void SetUser()
{
lock(typeof(SmWFM))
{
if(m_User == null )
m_User = new MyUserService(m_StrConn );
}
}
public static MyUserService User
{
get
{
if(m_User == null )
SetUser();
return m_User;
}
}
// ......
}
其實,有了Spring.NET這樣的架構,這樣做就沒必要了。