BLL (Business Logic Layer) 處於承上啟下關鍵位置:
BLService<T> 提供基本增刪改查,預設服務不公開,需於衍生類別公開。關鍵屬性:
[Operation(ScopeOption.Disabled)]:查詢方法通常停用交易範圍。[Operation(ScopeOption.Required)]:異動方法啟用交易。[Action("名稱", "描述")]:動作標註,供 Controller 代碼生成使用。public class UserImp<T> : BLService<T> where T : EESObject, new()
{
[Operation(ScopeOption.Disabled)]
public virtual T FindById(String code) { return base.FindId(code); }
[Operation(ScopeOption.Disabled)]
public virtual DataCollection<T> FindByName(string name)
{
Where clause = new Where();
clause.Add("Name", name);
return base.Find(clause);
}
[Action("保存", "保存")]
[Operation(ScopeOption.Required)]
public override T Save(T t) { return base.Save(t); }
}
// 具體服務類別
[EESBO("User")]
public class UserService : UserImp<User>
{
[Operation(ScopeOption.Required)]
public virtual EESContext Login(string userId, string salt) { /* ... */ }
[Operation(ScopeOption.Required)]
[Action("密碼重設")]
public virtual User ResetPwd(User user) { /* ... */ }
}
UserImp 為自動生成基類,UserService 為手寫業務邏輯類,分離關注點。Where 物件建構條件,伺服器端可用 WhereEx 處理複雜字串拼接。virtual,以便 Proxy 攔截。Factory.New<UserService>(),客戶端用 ProxyFactory.GetProxy<UserService>()。main()
{
EES.Common.Config.Configuration.Root = "...";
User user = Factory.New<User>();
user.Code = "123456";
UserService srv = Factory.New<UserService>();
srv.Save(user);
}
服務端 UserService 完全不需修改,僅需部署至 IIS 並加入設定檔,即可透過 HTTP 進行遠端 RPC 呼叫。客戶端同樣無需改動程式碼,只需加入自動生成的 Proxy 類別並調整設定。
作者仍在評估是否引入 LINQ,歡迎社群建議。