为什么Java工程中要分domain、service、util文件夹?
·
这几个文件夹命名是Java 工程中的工程分层架构(Layered Architecture),它属于软件工程和代码组织规范的范畴。
在开发中,为了让代码逻辑清晰、易于维护,我们通常会将不同功能的代码“分门别类”地放入不同的文件夹(在 Java 中通常对应不同的包 package)。
1. domain(领域模型 / 实体类层)
- 含义:这是程序的“骨架”。这里面主要存放的是数据对象(也叫 POJO,Plain Old Java Object)。
- 作用:它代表了业务中存在的实体。比如一个员工、一本书、或是订单。它通常只包含属性(字段)和对应的 Getter/Setter 方法,负责定义数据的结构。
- 比喻:相当于合同里的“表格模板”,规定了每一行该填什么信息。
2. service(业务逻辑层)
- 含义:这是程序的“大脑”。这里面存放的是核心业务逻辑代码。
- 作用:它负责处理具体的业务规则。比如“如何计算订单总价”、“如何校验用户权限”、“转账逻辑”等。它会调用底层的资源来完成复杂任务。
- 比喻:相当于“办事大厅的柜员”,他们掌握处理复杂流程的规则,你不必关心他们背后查了多少数据库,你只需要告诉他们你要办什么业务。
3. util(工具类层)
- 含义:这是程序的“帮手”或“工具箱”。这里面存放的是一些与具体业务无关的、通用的辅助代码。
- 作用:提供各种公共操作,例如
DateUtil(处理日期格式化)、JsonUtil(处理 JSON 转换)、StringUtil(处理字符串)等。这些方法通常是static(静态)的。 - 比喻:就像你桌上的“文具盒”,里面的剪刀、胶水、订书机。它们不属于某个特定的业务,但谁都可以拿出来用。
如何理解这种分层方式?
这种分层其实遵循了高内聚、低耦合的架构思想:
- 为什么要这么分?
- 职责单一:如果你要在代码里算价格,你就去
service找;如果你想看看“用户”这个对象有哪些字段,你就去domain找。不会发生所有代码混在一个文件里的混乱情况。 - 易于修改:假设你要变更“业务规则”,你只需要动
service,而不会影响到util工具类或domain数据模型,系统更稳定。 - 代码复用:
util里的代码可以在整个项目中被任意调用。
- 职责单一:如果你要在代码里算价格,你就去
总结:
我们可以把一个项目想象成一个公司:
domain是公司的员工档案(存数据);service是公司的业务部门(处理核心工作);util是公司的后勤部(提供通用支持)。
当你看到这样的结构时,就说明这个工程采用了比较规范的开发模式。在后续的学习中,你可能还会看到 controller(负责接收请求)或 dao/mapper(负责直接操作数据库),它们的逻辑也是一致的,都是为了把庞大的代码分而治之。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)