-
-
Save kouzouigh/cf580def0f2a1595329f9108d7c45783 to your computer and use it in GitHub Desktop.
Presenter in Clean Architecture
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// shared datastructures | |
data class ResponseModel(val value: String) | |
data class JsonResponse(val jsonValue: String) | |
// example 1 | |
interface FooUseCase { | |
fun <T> T doSomething(presenter: (ResponseModel -> T)) | |
} | |
@RestController | |
@RequestMapping("/bar") | |
class Controller(val useCase: FooUseCase) { | |
@GetMapping | |
fun bar() : JsonResponse { | |
return useCase.doSomething { responseModel -> JsonResponse(responseModel.value) } | |
} | |
} | |
// example 2 | |
interface FooUseCase { | |
fun doSomething(presenter: Consumer<ResponseModel>) | |
} | |
class JsonPresenter() : Consumer<ResponseModel> { | |
private var presented : JsonResponse | |
fun accept(responseModel responseModel) { | |
presented = JsonResponse(responseModel.value) | |
} | |
fun getPresentedState() = presented | |
} | |
@RestController | |
@RequestMapping("/bar") | |
class Controller(val useCase: FooUseCase) { | |
@GetMapping | |
fun bar() : JsonResponse { | |
val presenter = JsonPresenter() | |
useCase.doSomething(presenter) | |
return presenter.getPresentedState(); | |
} | |
} | |
// example 3 | |
interface FooUseCase { | |
fun doSomething(presenter: Consumer<ResponseModel>) | |
} | |
class JsonPresenter(val httpResponse: HttpServletResponse) : Consumer<ResponseModel> { | |
fun accept(responseModel: ResponseModel) { | |
httpResponse.getWriter().println(ObjectMapper().writeAsString(responseModel)) | |
} | |
} | |
@RestController | |
@RequestMapping("/bar") | |
class Controller(val useCase: FooUseCase) { | |
@GetMapping | |
fun bar(val httpResponse: HttpResponse) { | |
val presenter = JsonPresenter(httpResponse) | |
useCase.doSomething(presenter) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment