iT邦幫忙

DAY 29
2

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 項內容組合而成:

  1. Event 事件
  2. Success/Failure 成功或失敗
  3. Who 誰
  4. When 何時
  5. Extra Datas 額外資料

『登入』是事件,『登入成功』不是事件,而是被稽核的標的。事件本身是中性的,不包含成功或是失敗,稽核是記錄各類事件的成功或失敗,以及為何人於何時發生包含那些額外資料,一併記載下來,其目的是作為事後追查的線索來源。

<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 個方法:

  1. Verify 權限驗證
    權限驗證以『使用者』作為驗證主體。
  2. Grant 授與權限
    授權以『角色』作為授與主體。
  3. Revoke 撤消權限
    撤權以『角色』作為撤消主體。

========================================
鐵人賽分享列表:Kuick Application & ORM Framework
開放原始碼專案:kuick.codeplex.com
直接下載原始碼:Kuick
下載相關文件檔:C# Code Conventions and Design Guideline
相關教學影片區:Kuick on YouTube


上一篇
Kuick -- 網頁資料傳遞
下一篇
Kuick -- 內建的服務實作:Config Service 執行期設定服務
系列文
Kuick Application & ORM Framework34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言