Understanding Alibaba’s Java Domain Model Conventions: DO, DTO, BO, VO, and More
This article explains Alibaba’s Java development guidelines for layered domain models, detailing the purpose and naming rules of DO, DTO, BO, AO, VO, and Query objects, and clarifies the roles of PO, VO, DAO, BO, DTO, and POJO in clean backend architecture.
Alibaba Java Development Specification – Domain Model Overview
Layered Domain Model Types
DO (Data Object) : One‑to‑one mapping to a database table; transferred through the DAO layer.
DTO (Data Transfer Object) : Used by Service/Manager layers to carry data outward, often a subset of PO fields.
BO (Business Object) : Encapsulates business logic; returned by the Service layer.
AO (Application Object) : Reusable model between Web and Service layers, closely tied to presentation concerns.
VO (View Object) : Sent from the Web layer to the view/template engine.
Query : Carries query parameters; for queries with more than two parameters, a dedicated object must be used instead of Map.
Naming Conventions
Data Object: xxxDO where xxx is the table name.
Data Transfer Object: xxxDTO where xxx reflects the business domain.
View Object: xxxVO where xxx usually denotes the page or view name.
POJO is a collective term for DO/DTO/BO/VO; naming xxxPOJO is prohibited.
Detailed Object Definitions
PO (Persistent Object)
A Java class that directly maps to a database table, typically generated by an ORM such as Hibernate.
VO (Value Object)
Used for data transfer between business layers. It may correspond to a table or be purely logical, depending on business needs. VO is intended for the business and presentation layers, while PO is confined to the data layer, reducing coupling.
DAO (Data Access Object)
An interface that abstracts database operations, separating low‑level data access from high‑level business logic. A typical DAO implementation includes:
A DAO factory class.
A DAO interface.
An implementation class of the DAO interface.
A data transfer object (sometimes called a value object).
BO (Business Object)
Represents domain entities that encapsulate business behavior and are managed by service classes.
DTO (Data Transfer Object)
Optimized for remote calls or scenarios where only a subset of fields is required. For example, a table with 100 columns may have a PO with 100 attributes, but a DTO can expose only the 10 columns needed for a UI, avoiding unnecessary data transfer and hiding internal schema.
POJO (Plain Old Java Object)
Simple JavaBeans without business methods or infrastructure dependencies. POJOs can serve as value objects or DTOs, provided they contain only properties with getters/setters and no business logic or resource‑handling code.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Architect's Guide
Dedicated to sharing programmer-architect skills—Java backend, system, microservice, and distributed architectures—to help you become a senior architect.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
