這是一個加載的問題,但我會盡力回答一些。 我強烈建議您查看Vaughn Vernon的github sample。他是Implementing Domain Driven Design的作者。
服務的定義在您提供的SO鏈接中非常好地排列。所以我打算給你提供示例代碼來消化這個描述。
以配置身份訪問域中的租戶爲例。
下面是沃恩的github上幾個很明顯的例子:
這裏是租戶域對象:
package com.saasovation.identityaccess.domain.model.identity;
public class Tenant extends extends ConcurrencySafeEntit {
public Tenant(TenantId aTenantId, String aName, String aDescription, boolean anActive) {
...
}
public Role provisionRole(String aName, String aDescription) {
...
}
public void activate(){}
public void deactivate(){}
....
}
租戶庫:
package com.saasovation.identityaccess.domain.model.identity;
public interface TenantRepository {
public void add(Tenant aTenant);
}
租客域名服務:
package com.saasovation.identityaccess.domain.model.identity;
public class TenantProvisioningService {
private TenantRepository tenantRepository;
public Tenant provisionTenant(
String aTenantName,
String aTenantDescription,
FullName anAdministorName,
EmailAddress anEmailAddress,
PostalAddress aPostalAddress,
Telephone aPrimaryTelephone,
Telephone aSecondaryTelephone) {
Tenant tenant = new Tenant(
this.tenantRepository().nextIdentity(),
aTenantName,
aTenantDescription,
true); // must be active to register admin
this.tenantRepository().add(tenant);
}
}
這是一個應用服務:
package com.saasovation.identityaccess.application;
@Transactional
public class IdentityApplicationService {
@Autowired
private TenantProvisioningService tenantProvisioningService;
@Transactional
public Tenant provisionTenant(ProvisionTenantCommand aCommand) {
return
this.tenantProvisioningService().provisionTenant(
aCommand.getTenantName(),
aCommand.getTenantDescription(),
new FullName(
aCommand.getAdministorFirstName(),
aCommand.getAdministorLastName()),
new EmailAddress(aCommand.getEmailAddress()),
new PostalAddress(
aCommand.getAddressStateProvince(),
aCommand.getAddressCity(),
aCommand.getAddressStateProvince(),
aCommand.getAddressPostalCode(),
aCommand.getAddressCountryCode()),
new Telephone(aCommand.getPrimaryTelephone()),
new Telephone(aCommand.getSecondaryTelephone()));
}
}
我不喜歡下面作爲域對象沒有做下面任何東西,除了攜帶數據,這是一個貧血模型給出的例子。任何人都可以幫助我一個明確的例子嗎? – developer