我有不同的服务,每个服务都有不同的类型。例如,UpdateService有三种不同的类型(HighFreq,MediumFreq,MinFreq)。
我已经为我的服务和我的类型做了一个例子:
public enum UpdateServiceType: byte
{
MinUpdateFreq= 1,
MediumUpdateFreq = 2,
HighUpdateFreq = 3
}
和
public enum MyServices: byte
{
UpdateService = 1,
SpecialService= 2,
}
然后关于在数据库上保存服务和相关类型的条件,如:
serviceId= 1
ServiceType =2
现在我想创建每个服务,但我不知道使用哪种模式:工厂模式,服务定位器,甚至我不知道我是否做了正确的使用枚举的事情?
我应该使用什么而不是枚举?我应该如何创建适当的服务?什么是最佳做法?在这种情况下,如何使用像团结一样的ioc?
更新
阅读Mark Seeman的精彩帖子后,我发现Metadata Role Hint适合我的问题,因为它明确地描述了这个类。但后来我又遇到了另一个问题。标记建议的工厂是这样的:
public class UpdatePackageFactory : UpdatePackageFactory
{
private readonly IEnumerable<IUpdatePackage> _candidates;
public UpdatePackageFactory(IEnumerable<IUpdatePackage> candidates)
{
_candidates = candidates;
}
public IUpdatePackage GetUpdatePackage(UpdateFreq UpdateFreq)
{
return (from c in this._candidates
let handledMethod = c.GetType().GetCustomAttribute<HandleUpdateFreqAttribute>()
where handledMethod != null && handledMethod.UpdateFreq == UpdateFreq
select c).SingleOrDefault();
}
}
它需要和枚举像
public enum UpdateFreq : byte
{
MinUpdateFreq= 1,
MediumUpdateFreq = 2,
HighUpdateFreq = 3
}
但是现在我想建立另一家工厂,使上面的工厂成为工厂,它自己依赖于像enum这样的工厂
public enum ServiceFactory: byte
{
UpdateService= 1,
SpecialService = 2,
HighUpdateFreq = 3
}
使用上面提到的方法我可以建造另一个建造工厂的工厂,但问题是每个工厂都有自己的枚举如何让工厂接受不同的工厂。例如,这将是我工厂的一个方法,它采用两个枚举作为参数,第一个永远是myservices,但第二个参数将改变与工厂的比例。有一次它可能是updateFreq,另一次是specialType或.....
public IUpdatePackage GetUpdatePackage(MyServices myServices,UpdateFreq updateFreq )
{
}
或者在这里做另一个例子Abstract Factory工厂有枚举
enum MANUFACTURERS
{
NOKIA,
SAMSUNG,
HTC,
}
但是,如果每个工厂再次拥有自己的枚举,例如NokiFactory接受带有不同项目的枚举,Htc接受另一个具有不同命名的枚举,依此类推。
我应该怎么写这样的工厂?