Golang으로 CleanArchitecture의 usecase부를 설치해보도록 하겠습니다.

6020 단어 CleanArchitectureGo
이 그림의 오른쪽 아래에 있는 분홍색은 Cases 부분을 사용합니다.
청결 체계 구조 번역

지금 가장 설레는 건 스칼라예요. 그래서 스칼라에 초소박하게 설치하면 이런 느낌이겠죠.
scala
trait InputPort[I, O] {
    def run(param: I, outputPort: OutputPort[O]): Unit = outputPort.run(doRun(param))
    protected def doRun(param: I): UseCaseResult[O]
}

trait OutputPort[T] {
    def run(usecaseResult: UseCaseResult[T]): Unit
}

type Errors = List[String]
type UseCaseResult[O] = Either[Errors, O]
특히 이 InputPort에서 만든 template method 부분을 golang으로 쓰면 어떻게 해야 할지 금방 생각이 안 나서 해봤어요.
이런 느낌인가요?
go
package usecases

type InputPort struct {
    Interactor Interactor
}

func (inputPort InputPort) Run(param interface{}, outputPort OutputPort) {
    outputPort.Run(inputPort.Interactor.Run(param))
}

type Interactor interface {
    Run(param interface{}) UseCaseResult
}

type UseCaseResult struct {
    Value interface{}
    Error error
}

type OutputPort interface {
    Run(result UseCaseResult)
}
추적:
그래도 될 것 같아서요.
go
type InputPort interface {
    Run(param interface{}) UseCaseResult
}

type OutputPort interface {
    Run(result UseCaseResult)
}

func Run(param interface{}, inputPort InputPort, outputPort OutputPort) {
    outputPort.Run(inputPort.Run(param))
}

좋은 웹페이지 즐겨찾기