接下來的 3 篇內容,討論 Entity 的資料結構,包含:
<DDL, DML 控制 property>
Alterable 是否允許同步規格
IsView 是否為檢視表
Addable 是否可新增資料
Modifyable 是否可修改資料
Removable 是否可刪除資料
AllowBatchModify 是否允許批次修改資料
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