C# 工厂返回接口
我正在创建一个票务系统,其中一个请求由用户提交,最终由SME响应。在这个系统中可以提出两种类型的请求;支持硬件查询和备用驱动程序查询 由于它们具有相似的特性,我创建了一个名为IRequest的接口C# 工厂返回接口,c#,design-patterns,interface,C#,Design Patterns,Interface,我正在创建一个票务系统,其中一个请求由用户提交,最终由SME响应。在这个系统中可以提出两种类型的请求;支持硬件查询和备用驱动程序查询 由于它们具有相似的特性,我创建了一个名为IRequest的接口 public interface IRequest { int RequestId { get; } State State { get; } RequestHeader RequestHeader { get; } InterimDialogue InterimDia
public interface IRequest
{
int RequestId { get; }
State State { get; }
RequestHeader RequestHeader { get; }
InterimDialogue InterimDialogue { get; }
RequestSolution RequestSolution { get; }
}
在两种请求类型略有不同的地方,我创建了两个单独的接口,它们都实现了IRequest
SupportHardwarequiry的接口如下所示
public interface ISupportHardwareEnquiry : IRequest
{
SupportingInformation SupportingInformation { get; }
ProblemTask ProblemTask { get; }
}
最后,具体的类实现了ISupportHardwareEnquiry
public class SupportHardwareEnquiry : ISupportHardwareEnquiry
{
public int RequestId { get; private set; }
public State State { get; private set; }
public RequestHeader RequestHeader { get; private set; }
public SupportingInformation SupportingInformation { get; private set; }
public ProblemTask ProblemTask { get; private set; }
public InterimDialogue InterimDialogue { get; private set; }
public RequestSolution RequestSolution { get; private set; }
// etc ...
}
为了实例化SupportHardwareRequesty对象,使用了RequestFactory
public class RequestFactory : IRequestFactory
{
public IRequest CreateSupportHardwareEnquiry()
{
return new SupportHardwareEnquiry();
}
public IRequest CreateAlternateDriverEnquiry()
{
return new AlternateDriverEnquiry();
}
}
我还使用存储库列出请求,并重新组织单个请求
public interface IRequestRepository
{
IEnumerable<IRequest> GetAllRequests();
IRequest GetAlternateDriverEnquiry(int id);
IRequest GetSupportHardwareEnquiry(int id);
}
但是现在我知道我需要提前知道,我想得到什么,剩下的似乎没有多大意义
我知道我可以使用继承来代替,但是当我有时想将这些设计情况视为一般请求,有时又想将其视为特定类型的请求时,我应该如何处理这些设计情况呢?如果CreateSupportHardwarequiry()总是会返回IsupperWarequiry,只需在方法定义中键入Hint即可
public class RequestFactory : IRequestFactory
{
public ISupportHardwareEnquiry CreateSupportHardwareEnquiry()
{
return new SupportHardwareEnquiry();
}
public IRequest CreateAlternateDriverEnquiry()
{
return new AlternateDriverEnquiry();
}
}
public class RequestFactory : IRequestFactory
{
public ISupportHardwareEnquiry CreateSupportHardwareEnquiry()
{
return new SupportHardwareEnquiry();
}
public IRequest CreateAlternateDriverEnquiry()
{
return new AlternateDriverEnquiry();
}
}