Skip to content

Commit 2d9f887

Browse files
committed
Kotlin draft
1 parent a053b82 commit 2d9f887

File tree

5 files changed

+58
-0
lines changed

5 files changed

+58
-0
lines changed

kotlin/Domain.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Domain
2+

kotlin/Gateway.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Gateway
2+
3+
Contains IO adapters (e.g. files, database or API calls)
4+
These construct Domain objects for use by Use Cases, and, save Domain objects given to it

kotlin/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Made Tech Flavour Clean Architecture: Kotlin
2+
3+
4+
## Testing
5+
* [Spek](Spek.md) (Spek specific test layout)
6+
7+
## Production Code
8+
9+
Customer code should be housed within a Client package e.g. ```com.acmeindustries.widget```
10+
11+
Non-customer specfic code should be housed within a MadeTech namespace e.g. ```com.madetech.authentication```
12+
13+
* [Use Cases](UseCases.md) use_case/
14+
* [Domain](Domain.md) domain/
15+
* [Gateway](Gateway.md) gateway/

kotlin/Spek.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Spek
2+
3+
Coming soon!

kotlin/UseCases.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Use Cases
2+
3+
## Example
4+
5+
```kotlin
6+
package com.acmeindustries.widget.usecase
7+
8+
interface ViewWidgetPerFooBarReport {
9+
fun execute(request: Request): Response
10+
11+
data class Request(public val fromDate: String, public val endDate: String)
12+
data class Response(...)
13+
}
14+
```
15+
16+
```kotlin
17+
package com.acmeindustries.widget
18+
19+
import com.acmeindustries.widget.usecase.ViewWidgetPerFooBarReport
20+
import com.acmeindustries.widget.usecase.ViewWidgetPerFooBarReport.*
21+
import com.acmeindustries.widget.domain.Widget
22+
23+
class WidgetPerFooBarReport(val widgetGateway: WidgetGateway) : ViewWidgetPerFooBarReport {
24+
fun execute(request: Request): Response {
25+
val widgets = widgetGateway.all()
26+
//secret sauce here
27+
return Response(...) //return response populated with data
28+
}
29+
}
30+
31+
interface WidgetGateway {
32+
fun all(): List<Widget>
33+
}
34+
```

0 commit comments

Comments
 (0)