Kuick 定義 7 個內建服務介面,目前實作其中 2 個,本文先說明 Kuick 認為 Application Framework 致少該有那些內建服務。
<Auditor 稽核服務>
public interface IAuditor : IBuiltin
{
void Register(string eventName, AuditLevel level);
AuditLevel Level(string eventName);
void Add(bool success, IEvent _event, string userName, string xml, params Any[] anys);
}
稽核由 5 項內容組合而成:
『登入』是事件,『登入成功』不是事件,而是被稽核的標的。事件本身是中性的,不包含成功或是失敗,稽核是記錄各類事件的成功或失敗,以及為何人於何時發生包含那些額外資料,一併記載下來,其目的是作為事後追查的線索來源。
<Cache 快取服務>
public interface ICache : IBuiltin
{
Result Update(string group, string name);
bool NeedUpdate(string group, string name, DateTime cacheDateTime);
List<string> Groups();
List<string> Names(string group);
}
依據不同的需求,快取存在相當多不同的設計方式,這裡所定義的快取,目的是為了溝通系統之間的資料更新訊息。
<Config 組態服務>
public interface IConfig : IBuiltin
{
bool Exists(string appID, string category, string path, string name);
string Read(string appID, string category, string path, string name);
Result Write(string appID, string category, string path, string name, string value);
Result Clear(string appID, string category, string path, string name);
bool GlobalExists(string category, string path, string name);
string GlobalRead(string category, string path, string name);
Result GlobalWrite(string category, string path, string name, string value);
Result GlobalClear(string category, string path, string name);
List<string> AppIDs();
List<string> Categories(string appID);
List<string> Paths(string appID, string category);
List<string> Names(string appID, string category, string path);
}
系統需要有類似於 Windows 登錄檔 (Registry) 的組態服務,提供給執行期時的操作設定儲存處。組態服務分成系統內的獨立組態,以及跨系統之間的共用組態。
<Directory 目錄服務>
public interface IDirectory : IBuiltin
{
// User
IUser GetUser(string userName);
List<IUser> Users { get; }
// Role
IRole GetRole(string roleID);
List<IRole> Roles { get; }
}
請參考 Wikipedia: Directory service
<Identity 自動編號服務>
public interface IIdentity : IBuiltin
{
void Setting(
string appID,
string category,
string name,
Frequency frequency,
int start,
int incrementalValue
);
int Booking(string appID, string category, string name);
List<string> AppIDs();
List<string> Categories(string appID);
List<string> Names(string appID, string category);
}
自動編號的需求,絕大多數採用資料庫內建的功能,但是各種資料庫實作方式不同,以 MSSql 為例,Identity 是欄位資料型態的一種,Oracle 則視為資料庫裡的一個物件,這裡定義的自動編號服務,除了為了消除不同料庫之間的差異之外,還提供更廣的服務如下定義:
<Multilingual 多語系服務>
public interface IMultilingual : IBuiltin
{
string Read(string appID, string Language, string path, string name);
Result Write(string appID, string Language, string path, string name, string value);
Result Clear(string appID, string Language, string path, string name);
string GlobalRead(string Language, string path, string name);
Result GlobalWrite(string Language, string path, string name, string value);
Result GlobalClear(string Language, string path, string name);
List<string> AppIDs();
List<string> LangIDs(string appID);
List<string> Paths(string appID, string Language);
List<string> Names(string appID, string Language, string path);
}
經驗裡多語系設計是藉由資源檔完成的,但是如果存在執行期再定義多語系的需求,資源檔的設計就不是可以達成。
<Security 授權服務>
public interface ISecurity : IBuiltin
{
bool Verify(IUser user, IResource resource, PermissionAction action);
Result Grant(IRole role, IResource resource, PermissionAction action);
Result Revoke(IRole role, IResource resource, PermissionAction action);
}
授權是系統開發的基本的服務,主是定義『何人』對於『何物』有何『權限』,這裡所指何人可為『使用者』,也可能是『角色』,『何物』視為是資源,『權限』區分成 Non, Read, Write, Add, Delete, Export, Execute, Admin。
授權服務介面定義 3 個方法:
========================================
鐵人賽分享列表:Kuick Application & ORM Framework
開放原始碼專案:kuick.codeplex.com
直接下載原始碼:Kuick
下載相關文件檔:C# Code Conventions and Design Guideline
相關教學影片區:Kuick on YouTube