httppipeline 완료, mqttPipeline 개발 중. test 코드 작성 필요
This commit is contained in:
@@ -8,6 +8,44 @@ using System.Linq;
|
||||
|
||||
namespace UVC.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// 키-값 쌍의 데이터를 관리하고 변경 사항을 추적하는 동적 데이터 객체입니다.
|
||||
/// SortedDictionary를 상속하여 키를 기준으로 정렬된 데이터를 제공합니다.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 이 클래스는 JSON과 호환되는 데이터 구조를 표현하며, 데이터 변경 추적 기능을 통해
|
||||
/// 효율적인 데이터 동기화를 지원합니다.
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // DataMask 생성 및 설정
|
||||
/// var mask = new DataMask();
|
||||
/// mask.ObjectIdKey = "id";
|
||||
/// mask.ObjectName = "users";
|
||||
///
|
||||
/// // 필드 이름 변환 설정
|
||||
/// mask.NamesForReplace = new Dictionary<string, string>
|
||||
/// {
|
||||
/// { "userName", "name" },
|
||||
/// { "userEmail", "email" }
|
||||
/// };
|
||||
///
|
||||
/// // JObject 속성으로 마스킹 규칙 추가
|
||||
/// mask["include"] = new JArray("name", "email", "age");
|
||||
/// mask["exclude"] = new JArray("password", "token");
|
||||
///
|
||||
/// // DataObject에 마스크 적용하는 예시
|
||||
/// var dataObject = new DataObject();
|
||||
/// dataObject["userName"] = "홍길동";
|
||||
/// dataObject["userEmail"] = "hong@example.com";
|
||||
/// dataObject["password"] = "secret123";
|
||||
///
|
||||
/// // 마스크 적용 결과 (개념적 예시):
|
||||
/// // - userName은 name으로 변환됨
|
||||
/// // - userEmail은 email로 변환됨
|
||||
/// // - password는 제외됨
|
||||
/// </code>
|
||||
/// </example>
|
||||
public class DataObject : SortedDictionary<string, object>, IDataObject
|
||||
{
|
||||
|
||||
@@ -27,7 +65,9 @@ namespace UVC.Data
|
||||
public string Name { get; internal set; } = string.Empty;
|
||||
|
||||
|
||||
// 직접적인 변경이 있었던 키를 저장하는 리스트
|
||||
/// <summary>
|
||||
/// 직접적인 변경이 있었던 키를 저장하는 리스트입니다.
|
||||
/// </summary>
|
||||
protected List<string> changedProperies = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
@@ -132,7 +172,7 @@ namespace UVC.Data
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 새 속성을 추가할 때 이벤트 연결을 처리합니다.
|
||||
/// 새 속성을 추가하고 변경 사항을 추적합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">추가할 속성의 이름</param>
|
||||
/// <param name="value">속성의 값</param>
|
||||
@@ -152,9 +192,11 @@ namespace UVC.Data
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 인덱서를 통한 속성 설정을 처리합니다.
|
||||
/// 속성 변경 시 변경 사항을 자동으로 추적합니다.
|
||||
/// 인덱서를 통해 속성값에 접근하고 설정합니다.
|
||||
/// 속성값이 변경될 때마다 변경 사항을 자동으로 추적합니다.
|
||||
/// </summary>
|
||||
/// <param name="key">접근할 속성의 키</param>
|
||||
/// <returns>속성값</returns>
|
||||
public new object this[string key]
|
||||
{
|
||||
get => base[key];
|
||||
@@ -184,7 +226,12 @@ namespace UVC.Data
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 정수(int)로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>변환된 정수 값 또는 기본값</returns>
|
||||
public int GetInt(string propertyName, int defaultValue = 0)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -196,6 +243,12 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 문자열(string)로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 null인 경우 반환할 기본값</param>
|
||||
/// <returns>변환된 문자열 값 또는 기본값</returns>
|
||||
public string? GetString(string propertyName, string? defaultValue = null)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -205,6 +258,12 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 불리언(bool)으로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>변환된 불리언 값 또는 기본값</returns>
|
||||
public bool GetBool(string propertyName, bool defaultValue = false)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -216,6 +275,12 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 부동 소수점(float)으로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>변환된 부동 소수점 값 또는 기본값</returns>
|
||||
public float GetFloat(string propertyName, float defaultValue = 0f)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -227,6 +292,12 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 더블 정밀도 부동 소수점(double)으로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>변환된 더블 값 또는 기본값</returns>
|
||||
public double GetDouble(string propertyName, double defaultValue = 0.0)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -238,6 +309,12 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 DateTime으로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>변환된 DateTime 값 또는 기본값</returns>
|
||||
public DateTime? GetDateTime(string propertyName, DateTime? defaultValue = null)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -249,6 +326,13 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 열거형(Enum)으로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">변환할 열거형 타입</typeparam>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>변환된 열거형 값 또는 기본값</returns>
|
||||
public T GetEnum<T>(string propertyName, T defaultValue = default) where T : Enum
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -260,6 +344,27 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 IDataObject로 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 IDataObject가 아닌 경우 반환할 기본값</param>
|
||||
/// <returns>IDataObject 인터페이스를 구현한 객체 또는 기본값</returns>
|
||||
public IDataObject? Get(string propertyName, IDataObject? defaultValue = null)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
{
|
||||
if (value is IDataObject dataObject) return dataObject;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 DataArray로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>DataArray 객체 또는 기본값</returns>
|
||||
public DataArray? GetDataArray(string propertyName, DataArray? defaultValue = null)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -272,6 +377,12 @@ namespace UVC.Data
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 속성의 값을 DataObject로 변환하여 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">속성 이름</param>
|
||||
/// <param name="defaultValue">속성이 없거나 변환할 수 없는 경우 반환할 기본값</param>
|
||||
/// <returns>DataObject 객체 또는 기본값</returns>
|
||||
public DataObject? GetDataObject(string propertyName, DataObject? defaultValue = null)
|
||||
{
|
||||
if (TryGetValue(propertyName, out object value) && value != null)
|
||||
@@ -303,7 +414,7 @@ namespace UVC.Data
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 모든 속성을 제거할 때 기존 속성 목록과 변경된 키 목록도 초기화합니다.
|
||||
/// 모든 속성을 제거하고 추적 리스트를 초기화합니다.
|
||||
/// </summary>
|
||||
public void RemoveAll()
|
||||
{
|
||||
@@ -362,6 +473,17 @@ namespace UVC.Data
|
||||
return updated;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 업데이트 된 속성의 수.
|
||||
/// </summary>
|
||||
/// <returns>업데이트된 속성의 총 개수입니다. 업데이트된 속성이 없으면 0을 반환합니다.</returns>
|
||||
public int UpdatedCount { get => changedProperies.Count; }
|
||||
|
||||
/// <summary>
|
||||
/// DataObject의 내용을 문자열로 반환합니다.
|
||||
/// 각 키-값 쌍이 "키:값" 형식으로 쉼표로 구분되어 표시됩니다.
|
||||
/// </summary>
|
||||
/// <returns>DataObject의 내용을 나타내는 문자열</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Join(", ", this.Select(kvp => $"{kvp.Key}:{kvp.Value}"));
|
||||
|
||||
Reference in New Issue
Block a user