ShapeLogInfo:單一形狀變更記錄
public class ShapeLogInfo
{
public string ShapeType { get; set; } // 設備類型
public string ShapeID { get; set; } // Shape NameID
public string ShapeGuid { get; set; } // GUID 唯一識別
public ShapeStatus ShapeStatus { get; set; } // New/Edit/Delete
public string ShapeName { get; set; } // 設備名稱
}
public enum ShapeStatus
{
NewShape,
EditShape,
DeleteShape
}
ShapeTypeLogInfo:同類設備日誌聚合
public class ShapeTypeLogInfo
{
public string ShapeType { get; set; } // 設備類型
public string ShapeTableName { get; set; } // 對應資料庫表名
public Dictionary<string, ShapeLogInfo> ShapeCollection { get; set; }
// Key: ShapeID (NameID)
}
集合管理核心方法
// 取得或建立類型日誌容器
private ShapeTypeLogInfo GetShapeType(ShapeLogInfo shape) { ... }
// 智慧新增/更新:新增或更新狀態
public void AddLog(ShapeLogInfo shapeLogInfo)
{
ShapeTypeLogInfo typeLog = GetShapeType(shapeLogInfo);
if (typeLog.ShapeCollection.ContainsKey(shapeLogInfo.ShapeID))
{
// 狀態機邏輯:New+Delete=無記錄, Edit+Delete=Delete, etc.
typeLog.ShapeCollection[shapeLogInfo.ShapeID].ShapeStatus = shapeLogInfo.ShapeStatus;
}
else
{
typeLog.ShapeCollection.Add(shapeLogInfo.ShapeID, shapeLogInfo);
}
}
// 判斷是否為新形狀 (未在集合中)
public bool IsNewShape(ShapeLogInfo shape) { ... }
// 取得指定形狀日誌
public ShapeLogInfo GetShape(string shapeType, string shapeId) { ... }
設計優勢
- 按類型分組:對應資料庫表,批次處理效率高
- 狀態機合併:同一形狀多次操作合併為最終狀態 (新增+刪除=無痕)
- 字典索引:O(1) 查詢/更新
- GUID 追蹤:跨 Undo/Redo/Session 維持實體身分