乐趣区

关于架构:聊聊Onion-Architecture项目结构

本文次要钻研一下 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
退出移动版