【发布时间】:2021-11-18 07:38:07
【问题描述】:
我正在寻找有关以下目标的最佳模式的指针。
我有多个服务要发送作业,但将包含将形成单独对象 DataObject 的元数据。我正在考虑以下内容
public enum JobType
{
Job1 = 0,
Job2 = 1,
Job3 = 2
}
public class BaseJob
{
/// <summary>
/// Unique id maybe a guid
/// </summary>
public string Id { get; set; }
}
public interface IJob<T>
{
/// <summary>
/// Enumeration of a type of job
/// </summary>
JobType Job { get; set; }
/// <summary>
/// Serialized object JsonConvert.SerializeObject(data);
/// </summary>
string DataObject { get; set; }
/// <summary>
/// DeSerialized object of Type T;
/// </summary>
T Object { get; }
/// <summary>
/// Unique id maybe a guid
/// </summary>
string Id { get; set; }
/// <summary>
/// Create the job object natively
/// </summary>
/// <param name="data"></param>
void SetJobInfo(T data);
}
public class Job<T>: BaseJob, IJob<T>
{
/// <inheritdoc/>
public JobType Job { get; set; }
/// <inheritdoc/>
public string DataObject { get; set; }
[JsonIgnore]
public T Object => JsonConvert.DeserializeObject<T>(DataObject);
/// <inheritdoc/>
public void SetJobInfo(T data)
{
DataObject = JsonConvert.SerializeObject(data);
}
}
我可以使用工厂方法从一个微服务创建相关的作业,但是我如何检查另一个服务的类型是什么。如果可能的话,我试图在多个地方都没有逻辑。
当我从 Job DTO 反序列化 DataObject 时,在 Job 类型中定义 T 的最佳方法是什么?
public void GetJob(IJob<dynamic> job)
{
switch (job.Job)
{
case JobType.Job1:
// How do I get the T of the object
var object1 = job.Object;
// I would like to use T to do something..
break;
case JobType.Job2:
break;
case JobType.Job3:
break;
default:
throw new ArgumentOutOfRangeException(nameof(job), job, null);
}
}
谢谢
【问题讨论】:
标签: c# asp.net object serialization design-patterns