-2

实施1

type XAuth{ // talking to source1
   field1 Type1
   field2 Type2 
}

func (d *XAuth) f1(x str){
  // do something
}

func (d *XAuth) f2(x, y int){
  // do something
}

实施 2

type YAuth { // talking to source2
   field1 Type3
   field2 Type4 
}

func (d *YAuth) g1(x []str){
  // do something
}

func (d *YAuth) g2(x, y str){
  // do something
}

实施 3

type ZAuth{ // talking to source3
   field1 Type4
   field2 Type5 
}

func (d *ZAuth) h1(x float64){
  // do something
}

func (d *ZAuth) h2(y int){
  // do something
}

func (d *ZAuth) h3(z str){
  // do something
}

用户提供凭据user/passwd以验证上述 3 个实现。如果上述 3 个实现中的任何一个成功验证,则迭代这些实现并接受凭据。

公共 API 应该如何Auth(user,passwd)从这三种不同的实现中解耦?公共 API 的用户提供user/passwd

4

1 回答 1

1

我想说您可以按照通常的方法来实现这种机制:如果公共 API 在其操作中具有“步骤”,那么“步骤”将被实现为一种方法,该方法将接受来自客户端的“输入”并在完成时返回一个错误,一个可能的“输出”给客户端和一个布尔值,指示处理是否结束,执行下一步是必需的。

就像是

type ClientAuthenData interface {
}

type ServerAuthenData interface {
}

type Authenticator interface {
  Step(in ClientAuthenData) (out ServerAuthenData, err error, complete bool)
}

输入和输出数据的解释取决于所使用的具体验证器和步骤数。

于 2020-11-25T07:46:37.807 回答