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