DDD

DDD战术3 领域设计模型 I

2019-09-27  本文已影响0人  莫小归

GitChat课程《领域驱动设计--战术篇》笔记,课程作者张逸

一.表达领域设计模型

1.企业应用架构中表达领域逻辑的常见模式:事务脚本、表模块、领域模型

1.1事务脚本
public class FriendInvitationService {
    public void inviteUserAsFriend(String ownerId, String friendId) {
        try {
            bool isFriend = friendshipDao.isExisted(ownerId, friendId);
            if (isFriend) {
                throw new FriendshipException(String.format("Friendship with user id %s is existed.", friendId));
            }
            bool beInvited = invitationDao.isExisted(ownerId, friendId);
            if (beInvited) {
                throw new FriendshipException(String.format("User with id %s had been invited.", friendId));
            }

            FriendInvitation invitation = new FriendInvitation();
            invitation.setInviterId(ownerId);
            invitation.setFriendId(friendId);
            invitation.setInviteTime(DateTime.now());

            User friend = userDao.findBy(friendId);
            sendInvitation(invitation, friend.getEmail());

            invitationDao.create(invitation);
        } catch (SQLException ex) {
            throw new ApplicationException(ex);
        }
    } 
}
1.2表模板
1.3领域模型
DDD通过正交设计减少软件复杂度

2.DDD现实对象模型中的问题与解决

现实的对象模型需要考虑外部资源、依赖、性能和数据一致性,与理想模型相比,有诸多设计约束,DDD引入实体、值对象、聚合、资源库、工厂、领域事件等设计要素
2.1领域模型对象如何与数据库协作?
2.2领域模型对象的加载以及对象间的关系如何处理?
2.3领域模型对象在身份上是否存在差别?
2.4领域模型对象彼此之间如何能弱依赖地完成状态的变更通知?
现实世界、对象图模型与领域设计模型三者间关系

3.领域设计要素间关系图

设计要素在DDD中的作用(Eric Evans)

4.领域模型对象的哲学依据

二.实体

三.值对象

上一篇下一篇

猜你喜欢

热点阅读