序
本文次要钻研一下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