如何创建以特定顺序工作的Fluent界面

时间:2019-04-01 21:27:59

标签: .net design-patterns fluent-interface

你好,我正在尝试为一个对象创建一个流畅的API。我创建了一个builder对象,该对象将获得其依赖关系,然后我将生成结果对象。 问题是我需要使用那些async执行一些dependencies操作才能生成最终对象。

public class MyObject
{
   private object finalDependency;
   MyObject(object dependency)
  { 
     this.finalDependency=dependency;
  }
}
public class MyBuilder
{
  public int Dep1 {get;set;}
  public int Dep2 {get;set;}


}
public static class MyBuilderExtension
{
   public static MyBuilder SetDependency1(this MyBuilder obj,int dep1)
   {
       obj.Dep1=dep1;
       return obj;
   }
   public static MyBuilder SetDependency1(this MyBuilder obj,int dep2)
   {
       obj.Dep1=dep2;
       return obj;
   }
   public static MyObject BuildAsync(this MyBuilder obj)
   { 
      var d1=await OperationAsync1(obj.Dep1);
      var d2=await OperationAsync2(obj.Dep2);
      var dep=await OperationAsync(d1,d2);
      return new MyObject(dep);
   }
}

如您所见,我正在最终方法中执行所有必需的async操作,因为否则我无法保证以特定顺序(dep1-> dep2)执行操作。

如果我不想在最后的操作BuildAsync中将它们混在一起,那将是另一种选择。
我知道我可以一直使用async来逐一设置它们。 。但就我而言,我需要遵守一个命令。我不能先执行async操作。最后将它们保留给我控制权,而只有我才能构造该对象。

要达到以下目标,还有什么其他选择:

-create builder
-set field1  (async)
-set field2  (async)
-build 

用户被迫首先设置字段1,然后设置2?

PS 即使在上述示例中,这些操作似乎并不相互关联,因此您可能会说我需要的东西是无用的,因为它们并不依赖于它们。我必须按照特定的顺序进行操作!

0 个答案:

没有答案