iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

2023年度學習分享系列 第 27

規劃及實做anki-operator-generator功能

  • 分享至 

  • xImage
  •  

文章未來將更新於:
https://kevinyay945.com/golang-project-design/anki-support/design-and-implement-anki-operator-generator/

在接下來的功能,我會需要一個可以幫我針對anki的modelName的不同,來進行指定的操作
所以現在會需要以下的規劃

  1. 有個產生operator的generator,然後根據傳入的note來回傳相對應的operator
  2. 根據operator的類型,來進行相對應的操作

因此會需要以下的interface

type OperatorGenerator interface {  
    GetByNote(note Note) (o Operator, err error)  
}
type Operator interface {  
    Do() error  
}

另外,也要針對目前的牌組設定相對應的Operator
我目前自己的牌組有三種

  1. Japanese (recognition&recall)
  2. Japanese (recognition&recall) 動詞篇
  3. Japanese (recognition&recall) 形容詞

因此,也順應的產生了這三種struct

type NormalOperator struct {  
    Note Note  
}  
  
func (n *NormalOperator) Do() error {  
    //TODO implement me  
    panic("implement me")  
}  
  
type VerbOperator struct {  
    Note Note  
}  
  
func (v *VerbOperator) Do() error {  
    //TODO implement me  
    panic("implement me")  
}  
  
type AdjOperator struct {  
    Note Note  
}  
  
func (a *AdjOperator) Do() error {  
    //TODO implement me  
    panic("implement me")  
}

以及相對應的測試

func (t *AnkiOperationSuite) Test_get_correct_modal_type_operator() {  
    note := Note{  
       ModelName: "Japanese (recognition&recall)",  
    }  
    generator := OperatorGenerate{}  
    normalOperator, _ := generator.GetByNote(note)  
    _, ok := normalOperator.(*NormalOperator)  
    t.True(ok, "type is not *NormalOperator")  
  
    note = Note{  
       ModelName: "Japanese (recognition&recall) 動詞篇",  
    }  
    generator = OperatorGenerate{}  
    verbOperator, _ := generator.GetByNote(note)  
    _, ok = verbOperator.(*VerbOperator)  
    t.True(ok, "type is not *VerbOperator")  
  
    note = Note{  
       ModelName: "Japanese (recognition&recall) 形容詞",  
    }  
    generator = OperatorGenerate{}  
    adjOperator, _ := generator.GetByNote(note)  
    _, ok = adjOperator.(*AdjOperator)  
    t.True(ok, "type is not *AdjOperator")  
}

完整的程式碼如下
https://github.com/kevinyay945/anki-support/blob/v0.3.1


上一篇
重新思考infrastructure跟domain關係
下一篇
規劃Normal Anki Note測試案例
系列文
2023年度學習分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言