序
本文次要钻研一下 Onion Architecture 我的项目构造
Onion Architecture
Onion Architecture 定义了 domain、repository、services、ui 这几层,其外围要点如下:
- 整个利用基于独立的 domain 构建
- 外部的 layer 定义接口,内部的 layer 实现接口
- 内层与外层通过接口解耦
- services(
business logic
) 能够独立于 infrastructure 编译和运行
示例构造
github.com/splaw88/onion-architecture
├── application-logic
│ └── src
│ ├── main
│ │ └── java
│ │ └── pl
│ │ └── splaw
│ │ └── onionarchitecture
│ │ └── applicationlogic
│ │ └── services
│ │ └── implementation
│ └── test
│ └── java
│ └── pl
│ └── splaw
│ └── onionarchitecture
│ └── applicationlogic
│ └── services
│ └── implementation
├── application-services
│ └── src
│ └── main
│ └── java
│ └── pl
│ └── splaw
│ └── onionarchitecture
│ └── applicationservices
│ ├── exceptions
│ │ ├── worker
│ │ └── worklog
│ └── services
├── domain
│ └── src
│ └── main
│ └── java
│ └── pl
│ └── splaw
│ └── onionarchitecture
│ └── domain
│ └── model
├── infrastructure
│ └── console-based-app
│ ├── console-application
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── pl
│ │ └── splaw
│ │ └── onionarchitecture
│ │ └── consoleapplication
│ │ ├── factories
│ │ │ ├── console
│ │ │ ├── worker
│ │ │ └── worklog
│ │ ├── state
│ │ │ └── main
│ │ │ ├── worker
│ │ │ └── worklog
│ │ └── util
│ └── console-in-memory-repository
│ └── src
│ └── main
│ └── java
│ └── pl
│ └── splaw
│ └── onionarchitecture
│ └── inmemory
│ ├── worker
│ └── worklog
└── repository-interface
└── src
└── main
└── java
└── pl
└── splaw
└── onionarchitecture
└── repositoryinterface
└── repository
这里 application-services 工程、repository-interface 工程定义了接口;而后 application-logic 基于这些接口进行业务逻辑的实现;而 infrastructure 层则是对 application-services、repository-interface 定义的接口进行实现
小结
Onion Architecture 的外围在于内层定义接口,外层来进行实现,而后业务逻辑层则是基于接口来实现业务逻辑,基于接口来进行解耦。
doc
- The Onion Architecture : part 1
- The Onion Architecture : part 2
- The Onion Architecture : part 3
- Onion Architecture: Part 4 – After Four Years