iT邦幫忙

DAY 14
0

Kuick Application & ORM Framework系列 第 14

Kuick -- Entity 基本資料結構

接下來的 3 篇內容,討論 Entity 的資料結構,包含:

  1. Entity基本資料結構
  2. ObjectEntity 物件式資料結構
  3. HierarchyEntity 階層式資料結構
    分成幾類說明 Entity 基本資料結構:

<DDL, DML 控制 property>

  1. Alterable 是否允許同步規格

  2. IsView 是否為檢視表

  3. Addable 是否可新增資料

  4. Modifyable 是否可修改資料

  5. Removable 是否可刪除資料

  6. AllowBatchModify 是否允許批次修改資料

  7. AllowBatchRemove 是否允許批次刪除資料

    public virtual bool Alterable { get { return true; } }
    public virtual bool IsView { get { return false; } }
    public virtual bool Addable { get { return true; } }
    public virtual bool Modifyable { get { return true; } }
    public virtual bool Removable { get { return true; } }
    public virtual bool AllowBatchModify
    {
    get
    {
    return _AllowBatchModify
    ? true
    : null == BeforeModify && null == AfterModify;
    }
    internal set
    {
    _AllowBatchModify = value;
    }
    }

    public virtual bool AllowBatchRemove
    {
    get
    {
    return _AllowBatchRemove
    ? true
    : null == BeforeRemove && null == AfterRemove;
    }
    internal set
    {
    _AllowBatchRemove = value;
    }
    }

<Data Binding>
系統開發,時常會在設計期不知道操作的資料與欄位名稱為何,如果是這類的需求,以下這組方法 (SetValue, GetValue) 可以解決這件問題:

// SetValue
public void SetValue(params Any[] anys)
{
	foreach(Any x in anys) {
		SetValue(x.Name, x.Value);
	}
}

public void SetValue(NameValueCollection nvc)
{
	for(int i = 0; i < nvc.Count; i++) {
		SetValue(nvc.GetKey(i), nvc.Get(i));
	}
}

public void SetValue(string columnNameOrPropertyName, object value)
{
	Column column = GetColumn(columnNameOrPropertyName);
	SetValue(column, value);
}

public void SetValue(Column column, object value)
{
	Reflector.SetValue(this, column.Property, value);
}

// GetValue
public object GetValue(string columnNameOrPropertyName)
{
	Column column = GetColumn(columnNameOrPropertyName);
	return GetValue(column);
}

public object GetValue(Column column)
{
	object val = Reflector.GetValue(column.Property, this);
	return val;
}

<輸出>
輸出格式依據需求區分成 Xml 與 Json,操作處理如下:

UserEntity user = UserEntity.Get("kevinjong");
string xml = user.ToXml();
string json = user.ToJson();

<同步處理>
如何確保多人協同作業時仍保有資料一致性?
config檔案(Web.config / App.config)內明確指定啟用『資料一致性作業』

<configuration>
	<Kuick>
		<application>
			<add group="Data" name="Concurrency" value="True"/>
		</application>
	</Kuick>
</configuration>

啟用資料一致性作業之後,每一個資料表會自動建立一個名為 VERSION_NUMBER 的欄位,在資料修改刪除操作中,會自動比對操作的資料是否已經被其他人更新過。

如果有特定的資料不要使用資料一致性作業,可以如下修改

public override Flag Concurrency 
{ 
	get 
	{ 
		return Flag.Disable;
	}
}

<資料篩選>
可自訂預設的資料篩選條件,以及前台額外的資料篩選條件。

public override void Interceptor(Sql sql)
{
}

public override void FrontEndInterceptor(Sql sql)
{
}

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


上一篇
Kuick -- 事件替代 Trigger
下一篇
Kuick -- ObjectEntity 物件式資料結構
系列文
Kuick Application & ORM Framework34

尚未有邦友留言

立即登入留言