我的背景主要是JavaScript,并且一直在研究Java。虽然我以前在基本水平上使用过该语言,但是我还没有真正使用过应用程序,而令人不解的事情之一是文件结构和文件夹命名的重要性,例如controller
,entity
,gateway
,repository
,service
和model
。似乎项目之间的文件结构可能千差万别,而且我刚刚列出的名称的文件夹在一个项目之间的排列方式有很大不同。例如,我看到这样的内容:
├── common
├── config
├── controller
│ ├── helper
│ ├── request
│ └── response
├── core
│ └── service
├── entity
│ └── spec
├── exception
├── exceptionmapper
├── flow
├── gateway
│ └── entity
├── helpers
├── repository
│ └── mysql
│ └── dao
├── schema
├── script
├── service
├── transform
└── utils
和另一个类似的东西:
└── service
├── api
├── config
├── core
│ ├── enums
│ ├── models
│ ├── queue
│ │ ├── exceptions
│ │ └── local
│ ├── services
│ │ └── impl
│ ├── statemachine
│ ├── utils
│ └── workflow
│ └── tasks
├── gateway
│ └── exceptions
├── health
├── repository
│ ├── dao
│ ├── entity
│ ├── jpa
│ └── models
└── resources
我想知道是什么驱动了这些文件结构,因为它们对我来说似乎根本不同,尽管它们都是针对RESTful api的,以及我如何能够从一个包适应另一个包。
答案 0 :(得分:0)
从帖子的第二部分开始:
我想知道是什么驱动了这些文件结构
好吧,目前不同项目之间没有软件包结构的标准,因此只有约定和程序员的意愿才能确定这种结构。
某些现代的构建工具(Maven,Gradle)对放置源代码的文件夹做了一些假设(通常情况下可以自定义,但至少您有一个合理的约定)。例如,有src/main/java
,src/main/resources
,src/test/java
src/test/resources
个文件夹。
但是,这些工具没有对内部实际包结构进行假设,在理想情况下可以帮助您了解项目的真正划分方式
我想知道框架是否可以识别项目/软件包的文件结构
现在,某些框架可以对此做一些基本工作。 例如,看看Spring Boot。
仅当Bean位于包含主类的软件包“下方”的软件包中时,它才带有识别Bean的约定,例如:
|__com
|__app
|__myapp
| |__ Main.java // spring boot application main class
| |__web // will search for beans here by default
| |__businesslogic // will search for beans here by default
| |__dao // will search for beans here by default
|__somepackage // won't search for beans here by default
|__...
其他框架也可能会做一些假设,Spring boot只是一个例子。