我正在尝试学习有关依赖注入和规范模式的一些内容。
如果我有这种情况:我有三种方法,它们有不同的验证规则。此规则由规范验证。那么......我的班级必须在构造函数上收到这样的规范吗?
public PostService(IRepositorio rep, ISpecificationSave ss, SpecificationGet g, ISpecificationDelete sd) {
// do things...
}
但如果这是正确的,当我添加一个新方法时,我需要更改de构造函数以接收更多的规范吗?
或者,即使使用Dependency Inject,也更好,在这种情况下,在方法上创建一个规范实例,如何使用规范:
public void DoSomeThing(MyObject object) {
Specification<MyObject> specification = new Specification<MyObject>();
// do things...
}
我知道你们中的某些人的问题很简单,但我正在努力学习这些模式。
答案 0 :(得分:1)
您可以在每个验证器中使用这些规范,在您的班级中使用Specitication Pattern逐个添加,如下所示:
public Class Class1 : IClass1 {
private List<ISpecification> contents;
private List<ISpecification> specializations;
public List GetContents() {
return contents;
}
public Set GetFeatures() {
return specifications;
}
public Class1() {
features = new List<ISpecification>(){//put specializations who belongs this class here};
specialications = new List<ISpecification>();
}
public boolean Validator1() {
foreach(ISpecification as spec in this.specializations) {
if (!spec.GetSpecification().IsSatisfiedBy(this))
return false;
}
return true;
}
}
public class Specification1 : ISpecification {
private object requiredFeature;
public Specification1(object feature) {
requiredFeature = feature;
}
public boolean IsSatisfiedBy(IClass class) {
return class.GetFeatures().contains(requiredFeature);
}
}
然后,您可以通过以下方式在应用程序中添加规范:
IClass1 class = new Class1();
class.GetFeatures().add(new Specialization1(// some feature));
class.GetFeatures().add(new Specialization2(// some feature));
class.GetFeatures().add(new Specialization3(// some feature));