1、实体(Entity)
实体是具有唯一标识的对象,代码如下,
public class Post {
public Guid Id { get; private set; } // 唯一标识
public string Title { get; private set; } // 标题
public string Content { get; private set; } // 内容
public Post(Guid id, string title, string content) {
Id = id;
Title = title;
Content = content;
}
// 业务逻辑方法
public void UpdateContent(string content) {
Content = content;
}
}
2、值对象(Value Object)
值对象是没有唯一标识的不可变对象,代码如下,
public class CommentContent {
public string Content { get; private set; }
public CommentContent(string content) {
Content = content;
}
}
3、聚合/聚合根(Aggregate/Aggregate Root)
聚合是一组相关对象的集合,聚合根则是聚合内部的一个实体,它是聚合的入口。
public class BlogPost : Post { // BlogPost 作为聚合根继承自 Post
private List<Comment> _comments = new List<Comment>();
public IReadOnlyCollection<Comment> Comments => _comments.AsReadOnly();
public BlogPost(Guid id, string title, string content) : base(id, title, content) {
}
public void AddComment(Comment comment) {
_comments.Add(comment);
}
}
4、领域服务(Domain Service)
领域服务包含领域逻辑,通常是一些涉及多个实体和值对象的操作。
public class PostService {
public void PublishPost(BlogPost post) {
// 这里可以包含发布文章的领域逻辑
}
}
5、领域事件(Domain Event)
领域事件是领域内发生的重要业务事件。
public class PostPublishedEvent {
public Guid PostId { get; private set; }
public PostPublishedEvent(Guid postId) {
PostId = postId;
}
}
6、仓库(Repository)
仓库用于封装领域内的对象持久化逻辑。
public interface IPostRepository {
Post GetById(Guid id);
void Save(Post post);
}
7、应用服务(Application Service)
应用服务作为领域和用户界面之间的桥梁,处理应用逻辑。
public class BlogApplicationService {
private readonly IPostRepository _postRepository;
public BlogApplicationService(IPostRepository postRepository) {
_postRepository = postRepository;
}
public void CreatePost(string title, string content) {
var post = new BlogPost(Guid.NewGuid(), title, content);
_postRepository.Save(post);
}
}