《实现领域驱动设计》相关的源代码注释如下:
gitee.com/actual-comb…
- DDD:战略性领域驱动设计
- DDD:战术领域驱动设计
- DDD:领域驱动设计和六边形体系结构
- DDD:六边形架构【洋葱】-- 领域服务
- DDD:有界上下文和Java模块 -- 领域事件
- DDD:使用Spring数据构建聚合
- DDD:使用Spring数据构建存储库
- DDD:在JPA中使用值对象
- DDD:使用值对象作为Hibernate的聚合标识符
1. Module的树状构成
└─com
└─saasovation
└─agilepm---------------------------------------------------------<<敏捷项目管理上下文>>
├─application------------------------------------------------------------[应用层]
│ │ ApplicationServiceLifeCycle.java
│ │
│ ├─notification
│ │ NotificationApplicationService.java
│ │
│ ├─process
│ │ ProcessApplicationService.java
│ │
│ ├─product
│ │ │ InitiateDiscussionCommand.java
│ │ │ NewProductCommand.java
│ │ │ ProductApplicationService.java
│ │ │ ProductApplicationService_1_initiateDiscussion_calls.puml
│ │ │ ProductApplicationService_2_newProduct_calls.puml
│ │ │ ProductApplicationService_3_newProductWithDiscussion_calls.puml
│ │ │ ProductApplicationService_4_requestProductDiscussion_calls.puml
│ │ │ ProductApplicationService_5_retryProductDiscussionRequest_calls.puml
│ │ │ ProductApplicationService_6_startDiscussionInitiation_calls.puml
│ │ │ ProductApplicationService_7_timeOutProductDiscussionRequest_calls.puml
│ │ │ RequestProductDiscussionCommand.java
│ │ │ RetryProductDiscussionRequestCommand.java
│ │ │ StartDiscussionInitiationCommand.java
│ │ │ TimeOutProductDiscussionRequestCommand.java
│ │ │
│ │ └─backlogitem
│ │ BacklogItemApplicationService.java
│ │
│ ├─sprint
│ │ CommitBacklogItemToSprintCommand.java
│ │ SprintApplicationService.java
│ │
│ └─team
│ ChangeTeamMemberEmailAddressCommand.java
│ ChangeTeamMemberNameCommand.java
│ DisableMemberCommand.java
│ DisableProductOwnerCommand.java
│ DisableTeamMemberCommand.java
│ EnableMemberCommand.java
│ EnableProductOwnerCommand.java
│ EnableTeamMemberCommand.java
│ TeamApplicationService.java
│
├─domain-----------------------------------------------------------------[领域层]
│ └─model---------------------------------------------------------------模型
│ │ Entity.java----------------------------------------------------实体(基类)
│ │ ValueObject.java-----------------------------------------------值对象(基类)
│ │
│ ├─discussion------------------------------------------------------讨论模型
│ │ DiscussionAvailability.java--------------------------------枚举
│ │ DiscussionDescriptor.java----------------------------------值对象
│ │
│ ├─product---------------------------------------------------------产品模型
│ │ │ Product.java------------------------------------------------实体(聚合根)
│ │ │ ProductBacklogItem.java-------------------------------------实体
│ │ │ ProductBacklogItemPlanned.java------------------------------领域事件
│ │ │ ProductCreated.java-----------------------------------------领域事件
│ │ │ ProductDiscussion.java--------------------------------------值对象
│ │ │ ProductDiscussionInitiated.java-----------------------------领域事件
│ │ │ ProductDiscussionRequested.java-----------------------------领域事件
│ │ │ ProductDiscussionRequestTimedOut.java-----------------------领域事件
│ │ │ ProductId.java----------------------------------------------值对象
│ │ │ ProductReleaseScheduled.java--------------------------------领域事件
│ │ │ ProductRepository.java--------------------------------------存储库接口
│ │ │ ProductSprintScheduled.java---------------------------------领域事件
│ │ │
│ │ ├─backlogitem--------------------------------------------------待办事项模型
│ │ │ BacklogItem.java----------------------------------------实体(聚合根)
│ │ │ BacklogItemCategoryChanged.java-------------------------领域事件
│ │ │ BacklogItemCommitted.java-------------------------------领域事件
│ │ │ BacklogItemDiscussion.java------------------------------值对象
│ │ │ BacklogItemDiscussionInitiated.java---------------------领域事件
│ │ │ BacklogItemDiscussionRequested.java---------------------领域事件
│ │ │ BacklogItemId.java--------------------------------------值对象
│ │ │ BacklogItemMarkedAsRemoved.java-------------------------领域事件
│ │ │ BacklogItemRepository.java------------------------------存储库接口
│ │ │ BacklogItemScheduled.java-------------------------------领域事件
│ │ │ BacklogItemStatus.java----------------------------------枚举
│ │ │ BacklogItemStatusChanged.java---------------------------领域事件
│ │ │ BacklogItemStoryPointsAssigned.java---------------------领域事件
│ │ │ BacklogItemStoryTold.java-------------------------------领域事件
│ │ │ BacklogItemSummarized.java------------------------------领域事件
│ │ │ BacklogItemType.java------------------------------------枚举
│ │ │ BacklogItemTypeChanged.java-----------------------------领域事件
│ │ │ BacklogItemUncommitted.java-----------------------------领域事件
│ │ │ BacklogItemUnscheduled.java-----------------------------领域事件
│ │ │ BusinessPriority.java-----------------------------------值对象
│ │ │ BusinessPriorityAssigned.java---------------------------领域事件
│ │ │ BusinessPriorityCalculator.java-------------------------领域服务
│ │ │ BusinessPriorityRatings.java----------------------------值对象
│ │ │ BusinessPriorityTotals.java-----------------------------值对象
│ │ │ EstimationLogEntry.java---------------------------------实体
│ │ │ StoryPoints.java----------------------------------------枚举
│ │ │ Task.java-----------------------------------------------实体
│ │ │ TaskDefined.java----------------------------------------领域事件
│ │ │ TaskDescribed.java--------------------------------------领域事件
│ │ │ TaskHoursRemainingEstimated.java------------------------领域事件
│ │ │ TaskId.java---------------------------------------------值对象
│ │ │ TaskRemoved.java----------------------------------------领域事件
│ │ │ TaskRenamed.java----------------------------------------领域事件
│ │ │ TaskStatus.java-----------------------------------------枚举
│ │ │ TaskStatusChanged.java----------------------------------领域事件
│ │ │ TaskVolunteerAssigned.java------------------------------领域事件
│ │ │
│ │ ├─release-------------------------------------------------------发布模型
│ │ │ Release.java---------------------------------------------实体(聚合根)
│ │ │ ReleaseId.java-------------------------------------------值对象
│ │ │ ReleaseRepository.java-----------------------------------存储库接口
│ │ │ ScheduledBacklogItem.java--------------------------------实体
│ │ │
│ │ └─sprint--------------------------------------------------------冲刺模型
│ │ CommittedBacklogItem.java-------------------------------实体
│ │ Sprint.java---------------------------------------------实体
│ │ SprintId.java-------------------------------------------值对象
│ │ SprintRepository.java-----------------------------------存储库接口
│ │
│ ├─team-------------------------------------------------------------团队模型
│ │ Member.java-------------------------------------------------实体
│ │ MemberChangeTracker.java------------------------------------值对象
│ │ ProductOwner.java-------------------------------------------实体
│ │ ProductOwnerId.java-----------------------------------------值对象
│ │ ProductOwnerRepository.java---------------------------------存储库接口
│ │ Team.java---------------------------------------------------实体
│ │ TeamMember.java---------------------------------------------实体
│ │ TeamMemberId.java-------------------------------------------值对象
│ │ TeamMemberRepository.java-----------------------------------存储库接口
│ │ TeamRepository.java-----------------------------------------存储库接口
│ │
│ └─tenant-----------------------------------------------------------租户模型
│ TenantId.java----------------------------------------------值对象
│
└─port--------------------------------------------------------------[端口层]
└─adapter-------------------------------------------------------[适配器层]
├─messaging
│ │ ProductDiscussionExclusiveOwnerId.java
│ │
│ ├─rabbitmq-----------------------------------------------MQ
│ │ RabbitMQBacklogItemCommittedListener.java
│ │ RabbitMQDiscussionStartedListener.java
│ │ RabbitMQProductDiscussionRequestedListener.java
│ │ RabbitMQProductDiscussionRetryListener.java
│ │ RabbitMQTeamMemberDisablerListener.java
│ │ RabbitMQTeamMemberEmailAddressChangedListener.java
│ │ RabbitMQTeamMemberEnablerListener.java
│ │ RabbitMQTeamMemberNameChangedListener.java
│ │
│ └─sloth--------------------------------------------------MQ
│ SlothMQDiscussionStartedListener.java
│ SlothMQProductDiscussionRequestedListener.java
│ SlothMQProductDiscussionRetryListener.java
│ SlothMQTeamMemberDisablerListener.java
│ SlothMQTeamMemberEmailAddressChangedListener.java
│ SlothMQTeamMemberEnablerListener.java
│ SlothMQTeamMemberNameChangedListener.java
│
└─persistence----------------------------------------------[持久层]
LevelDBBacklogItemRepository.java
LevelDBDatabasePath.java
LevelDBProductOwnerRepository.java
LevelDBProductRepository.java
LevelDBReleaseRepository.java
LevelDBSprintRepository.java
LevelDBTeamMemberRepository.java
LevelDBTeamRepository.java
└─com
└─saasovation
└─collaboration-----------------------------------------------------<<协作上下文>>
├─application
│ ├─calendar
│ │ │ CalendarApplicationService.java
│ │ │ CalendarEntryApplicationService.java
│ │ │ CalendarEntryQueryService.java
│ │ │ CalendarQueryService.java
│ │ │
│ │ └─data
│ │ CalendarCommandResult.java
│ │ CalendarData.java
│ │ CalendarEntryData.java
│ │ CalendarEntryInviteeData.java
│ │ CalendarSharerData.java
│ │
│ └─forum
│ │ DiscussionApplicationService.java
│ │ DiscussionQueryService.java
│ │ ForumApplicationService.java
│ │ ForumQueryService.java
│ │ PostApplicationService.java
│ │ PostQueryService.java
│ │
│ └─data
│ DiscussionCommandResult.java
│ DiscussionData.java
│ DiscussionPostsData.java
│ ForumCommandResult.java
│ ForumData.java
│ ForumDiscussionsData.java
│ PostData.java
│
├─domain
│ └─model
│ │ DomainRegistry.java
│ │
│ ├─calendar
│ │ Alarm.java
│ │ AlarmUnitsType.java
│ │ Calendar.java
│ │ CalendarCreated.java
│ │ CalendarDescriptionChanged.java
│ │ CalendarEntry.java
│ │ CalendarEntryDescriptionChanged.java
│ │ CalendarEntryId.java
│ │ CalendarEntryParticipantInvited.java
│ │ CalendarEntryParticipantUninvited.java
│ │ CalendarEntryRelocated.java
│ │ CalendarEntryRepository.java
│ │ CalendarEntryRescheduled.java
│ │ CalendarEntryScheduled.java
│ │ CalendarId.java
│ │ CalendarIdentityService.java
│ │ CalendarRenamed.java
│ │ CalendarRepository.java
│ │ CalendarShared.java
│ │ CalendarSharer.java
│ │ CalendarUnshared.java
│ │ RepeatType.java
│ │ Repetition.java
│ │ TimeSpan.java
│ │
│ ├─collaborator
│ │ Author.java
│ │ Collaborator.java
│ │ CollaboratorService.java
│ │ Creator.java
│ │ Moderator.java
│ │ Owner.java
│ │ Participant.java
│ │
│ ├─forum
│ │ Discussion.java
│ │ DiscussionClosed.java
│ │ DiscussionId.java
│ │ DiscussionReopened.java
│ │ DiscussionRepository.java
│ │ DiscussionStarted.java
│ │ Forum.java
│ │ ForumClosed.java
│ │ ForumDescriptionChanged.java
│ │ ForumId.java
│ │ ForumIdentityService.java
│ │ ForumModeratorChanged.java
│ │ ForumReopened.java
│ │ ForumRepository.java
│ │ ForumStarted.java
│ │ ForumSubjectChanged.java
│ │ Post.java
│ │ PostContentAltered.java
│ │ PostedToDiscussion.java
│ │ PostId.java
│ │ PostRepository.java
│ │
│ └─tenant
│ Tenant.java
│
└─port
└─adapter
├─event
│ FollowStoreEventDispatcher.java
│
├─messaging
│ ExclusiveDiscussionCreationListener.java
│ RabbitMQEventDispatcher.java
│ RabbitMQEventDispatcher_0_RabbitMQEventDispatcher_calls.puml
│ RabbitMQEventDispatcher_1_dispatch_calls.puml
│ RabbitMQEventDispatcher_2_registerEventDispatcher_calls.puml
│ RabbitMQEventDispatcher_3_understands_calls.puml
│
├─persistence
│ │ EventStoreProvider.java
│ │
│ ├─repository
│ │ EventStoreCalendarEntryRepository.java
│ │ EventStoreCalendarRepository.java
│ │ EventStoreDiscussionRepository.java
│ │ EventStoreForumRepository.java
│ │ EventStorePostRepository.java
│ │
│ └─view
│ MySQLCalendarEntryProjection.java
│ MySQLCalendarProjection.java
│ MySQLDiscussionProjection.java
│ MySQLForumProjection.java
│ MySQLPostProjection.java
│ MySQLProjectionDispatcher.java
│
└─service
CollaboratorTranslator.java
HttpUserInRoleAdapter.java
TranslatingCollaboratorService.java
UserInRoleAdapter.java
└─com
└─saasovation
└─identityaccess-----------------------------------------------------<<身份与访问上下文>>
├─application
│ │ AccessApplicationService.java
│ │ ApplicationServiceRegistry.java
│ │ IdentityAccessEventProcessor.java
│ │ IdentityApplicationService.java
│ │ NotificationApplicationService.java
│ │
│ ├─command
│ │ ActivateTenantCommand.java
│ │ AddGroupToGroupCommand.java
│ │ AddUserToGroupCommand.java
│ │ AssignUserToRoleCommand.java
│ │ AuthenticateUserCommand.java
│ │ ChangeContactInfoCommand.java
│ │ ChangeEmailAddressCommand.java
│ │ ChangePostalAddressCommand.java
│ │ ChangePrimaryTelephoneCommand.java
│ │ ChangeSecondaryTelephoneCommand.java
│ │ ChangeUserPasswordCommand.java
│ │ ChangeUserPersonalNameCommand.java
│ │ DeactivateTenantCommand.java
│ │ DefineUserEnablementCommand.java
│ │ ProvisionGroupCommand.java
│ │ ProvisionRoleCommand.java
│ │ ProvisionTenantCommand.java
│ │ RegisterUserCommand.java
│ │ RemoveGroupFromGroupCommand.java
│ │ RemoveUserFromGroupCommand.java
│ │
│ └─representation
│ NotificationLogRepresentation.java
│ UserInRoleRepresentation.java
│ UserRepresentation.java
│
├─domain-------------------------------------------------------[领域层]
│ └─model-----------------------------------------------------模型
│ │ DomainRegistry.java
│ │
│ ├─access------------------------------------------------访问模型
│ │ AuthorizationService.java------------------------领域服务
│ │ GroupAssignedToRole.java-------------------------领域事件
│ │ GroupUnassignedFromRole.java---------------------领域事件
│ │ Role.java----------------------------------------实体
│ │ RoleProvisioned.java-----------------------------领域事件
│ │ RoleRepository.java------------------------------存储库接口
│ │ UserAssignedToRole.java--------------------------领域事件
│ │ UserUnassignedFromRole.java----------------------领域事件
│ │
│ └─identity----------------------------------------------身份模型
│ AuthenticationService.java
│ ContactInformation.java
│ EmailAddress.java
│ Enablement.java
│ EncryptionService.java
│ FullName.java
│ Group.java-------------------------------------实体
│ GroupGroupAdded.java---------------------------领域事件
│ GroupGroupRemoved.java-------------------------领域事件
│ GroupMember.java
│ GroupMemberService.java
│ GroupMemberType.java
│ GroupProvisioned.java
│ GroupRepository.java
│ GroupUserAdded.java----------------------------领域事件
│ GroupUserRemoved.java--------------------------领域事件
│ InvitationDescriptor.java
│ PasswordService.java---------------------------领域服务
│ Person.java------------------------------------实体
│ PersonContactInformationChanged.java-----------领域事件
│ PersonNameChanged.java-------------------------领域事件
│ PostalAddress.java
│ RegistrationInvitation.java
│ Telephone.java
│ Tenant.java
│ TenantActivated.java
│ TenantAdministratorRegistered.java
│ TenantDeactivated.java
│ TenantId.java---------------------------------
│ TenantProvisioned.java------------------------领域事件
│ TenantProvisioningService.java----------------领域服务
│ TenantRepository.java-------------------------存储库接口
│ User.java-------------------------------------实体
│ UserDescriptor.java
│ UserEnablementChanged.java--------------------领域事件
│ UserPasswordChanged.java----------------------领域事件
│ UserRegistered.java---------------------------领域事件
│ UserRepository.java---------------------------存储库接口
│
├─infrastructure---------------------------------------------[基础设施层]
│ ├─persistence---------------------------------------------持久层
│ │ GroupMemberTypeUserType.java
│ │ HibernateGroupRepository.java
│ │ HibernateRoleRepository.java
│ │ HibernateTenantRepository.java
│ │ HibernateUserRepository.java
│ │
│ └─services------------------------------------------------服务层
│ MD5EncryptionService.java
│
└─resource
AbstractResource.java
GroupResource.java
NotificationResource.java
TenantResource.java
UserResource.java
2. 收集的类、接口列表
com.saasovation.agilepm.domain.model.DomainTest
com.saasovation.agilepm.domain.model.DomainRegistry
com.saasovation.agilepm.domain.model.DomainEvent
com.saasovation.agilepm.domain.model.DomainEventPublisher
com.saasovation.agilepm.domain.model.product.BacklogItemRepository
com.saasovation.agilepm.domain.model.product.BacklogItem
com.saasovation.agilepm.domain.model.product.Tenant
com.saasovation.agilepm.domain.model.product.SprintId
com.saasovation.agilepm.domain.model.product.BusinessPriority
com.saasovation.agilepm.domain.model.product.BusinessPriorityRatings
com.saasovation.agilepm.domain.model.product.BusinessPriorityTest
com.saasovation.agilepm.domain.model.product.BusinessPriorityCalculator
com.saasovation.agilepm.domain.model.product.BacklogItemComitted
com.saasovation.agilepm.domain.model.product.Product
com.saasovation.agilepm.domain.model.product.backlogitem.BacklogItem
com.saasovation.agilepm.domain.model.product.release.Release
com.saasovation.agilepm.domain.model.product.sprint.Sprint
com.saasovation.agilepm.domain.model.product.impl.InMemoryProductRepository
com.saasovation.agilepm.domain.model.product.ProductRepository
com.saasovation.agilepm.domain.model.product.ProductDiscussion
com.saasovation.agilepm.domain.model.product.ProductDiscussionRequested
com.saasovation.agilepm.domain.model.product.ProductDiscussionRequestTimeOut
com.saasovation.agilepm.domain.model.tenant.TenantId
com.saasovation.agilepm.domain.model.team.MemberService
com.saasovation.agilepm.domain.model.team.ProductOwner
com.saasovation.agilepm.domain.model.team.Team
com.saasovation.agilepm.domain.model.team.TeamMember
com.saasovation.agilepm.domain.model.team.Member
com.saasovation.agilepm.domain.model.team.MemberChangeTracker
com.saasovation.agilepm.infrastructure.persistence.CoherenceProductRepository
com.saasovation.agilepm.infrastructure.messaging.TeamMemberEnablerListener
com.saasovation.agilepm.infrastrcuture.messaging.ProductDiscussionRequestedListener
com.saasovation.agilepm.infrastructure.messaging.DiscussionStartedListener
com.saasovation.agilepm.infrastructure.messaging.ProductDiscussionRetryListener
com.saasovation.agilepm.infrastructure.HibernateBacklogItemRepository
com.saasovation.agilepm.application.TeamService
com.saasovation.agilepm.application.ProductService
com.saasovation.agilepm.application.ProcessService
com.saasovation.identityaccess.domain.model.DomainRegistry
com.saasovation.identityaccess.domain.model.identity.User
com.saasovation.identityaccess.domain.model.identity.GroupMemberType
com.saasovation.identityaccess.domain.model.identity.Group
com.saasovation.identityaccess.domain.model.identity.GroupMember
com.saasovation.identityaccess.domain.model.identity.TenantId
com.saasovation.identityaccess.domain.model.identity.AuthenticationService
com.saasovation.identityaccess.domain.model.identity.Tenant
com.saasovation.identityaccess.domain.model.identity.UserDescriptor
com.saasovation.identityaccess.domain.model.access.Role
com.saasovation.identityaccess.application.eventStore.EventStore
com.saasovation.identityaccess.application.eventStore.StoredEvent
com.saasovation.identityaccess.application.NotificationService
com.saasovation.identityaccess.application.AccessService
com.saasovation.identityaccess.application.TenantIdentityService
com.saasovation.identityaccess.application.notifications.PublishedMessageTracker
com.saasovation.identityaccess.infrastructure.persistence.HibernateUserRepository
com.saasovation.identityaccess.infrastructure.servicies.DefaultEncryptionAuthenticationService
com.saasovation.identityaccess.infrastructure.persistence.GroupMemberTypeUserType
com.saasovation.identityaccess.infrastructure.persistence.SpringHibernateSessionProvider
com.saasovation.collaboration.domain.model.tenant.Tenant
com.saasovation.collaboration.domain.model.forum.Forum
com.saasovation.collaboration.domain.model.calendar.Calendar
com.saasovation.collaboration.domain.model.calendar.CalendarEntityRepository
com.saasovation.collaboration.domain.model.collaborator.CollaboratorService
com.saasovation.collaboration.domain.model.collaborator.Author
com.saasovation.collaboration.domain.model.collaborator.Collaborator
com.saasovation.collaboration.infrastructure.persistence.HibernateCalendarEntityRepository
com.saasovation.collaboration.infrastructure.persistence.SpringHibernateSessionProvider
com.saasovation.collaboration.infrastructure.servicies.UserRoleToCollaboratorService
com.saasovation.collaboration.infrastructure.services.TranslatingCollaboratorService
com.saasovation.collaboration.infrastructure.services.UserInRoleAdapter
com.saasovation.collaboration.infrastructure.services.CollaboratorTranslator
com.saasovation.collaboration.infrastructure.messaging.ExclusiveDiscussionCreationListener
com.saasovation.collaboration.application.ForumService
com.saasovation.collaboration.application.AccessService
com.saasovation.common.media.OvationMediaType
com.saasovation.common.media.ReprensentationReader
com.saasovation.common.port.adapter.messaging.rabbitmq.ExchangeListener
com.saasovation.common.domain.model.process.ProcessId
com.saasovation.common.domain.model.process.ProcessTimeOut
com.saasovation.common.domain.model.process.Process