首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Visio 二次開發:設備狀態追蹤(二)——ShapeLogInfo/ShapeTypeLogInfo 實體設計與集合管理

     編輯:關於C語言

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 維持實體身分
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved