iT邦幫忙

DAY 13
1

Kuick Application & ORM Framework系列 第 13

Kuick -- 事件替代 Trigger

這裡先不討論是否適合廣泛使用 Trigger 開發系統邏輯,以及使用 Trigger 的便利性以及除錯上帶來的麻煩,這裡僅討論 Kuick Entity 實作的 Instance 事件機制,如何替代資料庫的 Trigger 功能。
每一種資料庫對於 Trigger 有不同的實作,以 SQL Server 而言,分成 DDL TriggersDML Triggers 兩類。Kuick Entity 所關注的在於 Entity 本身,提供的事件機制功能所處理的範圍與 DML Triggers 相似又有些不同,接下來說明 Kuick Entity 的 8 個資料處理事件如何達成 DDL Triggers 可以完成的功能。
以 DML 的 4 種資料操作語法 Select, Insert, Update, Delete,再區分成操作前與操作後,Kuick Entity 僅包含以下 8 種資料處理事件

1. OnInit 物件初始事件
由於事件處理屬於 Instance 範圍,在還未產生 Instance 之前,只有藉由事件處理方法仿事件處理器功能,IEntity 定義 OnInit 方法,可以透過 override OnInit 方法達成物件初始化處理。

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public override void OnInit(object sender, EntityEventArgs e)
	{
		// todo..

		base.OnInit(sender, e);
	}
}

2. AfterSelect 選取後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterSelect += new InstanceEventHandler(UserEntity_AfterSelect);
	}

	private void UserEntity_AfterSelect(IEntity sender)
	{
		// todo
	}
}

3. BeforeAdd 新增前事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.BeforeAdd += new EntityEventHandler(UserEntity_BeforeAdd);
	}

	private void UserEntity_BeforeAdd(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

4. AfterAdd 新增後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterAdd += new EntityEventHandler(UserEntity_AfterAdd);
	}

	private void UserEntity_AfterAdd(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

5. BeforeModify 修改前事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.BeforeModify += new EntityEventHandler(UserEntity_BeforeModify);
	}

	private void UserEntity_BeforeModify(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

6. AfterModify 修改後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterModify += new EntityEventHandler(UserEntity_AfterModify);
	}

	private void UserEntity_AfterModify(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

7. BeforeRemove 刪除前事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.BeforeRemove += new EntityEventHandler(UserEntity_BeforeRemove);
	}

	private void UserEntity_BeforeRemove(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

8. AfterRemove 刪除後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterRemove += new EntityEventHandler(UserEntity_AfterRemove);
	}

	private void UserEntity_AfterRemove(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

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


上一篇
Kuick -- Data Initialize 資料初始化
下一篇
Kuick -- Entity 基本資料結構
系列文
Kuick Application & ORM Framework34

尚未有邦友留言

立即登入留言