我的"域程序集中有两个实体"。
Message
- Id
- Title
- Content
- IsMandatoryReading
MessageUser
- MessageId
- UserId // The user who already read the message
在我的"基础设施组装"我有MessageRepository,其方法有Save,Delete,GetAll,GetMany,FindById等,都引用实体Message。
现在,我想向用户显示标记他没有阅读过的所有消息。所以,我创建了方法:
public ICollection<MessageToUserDto> GetMessagesToUser( int userId ) { ... }
实体Message和DTO MessageToUserDto之间的唯一区别是&#34; IsRead&#34;将确定消息是否已被用户读取的属性。
DTO:
MessageToUserDto
- Id
- Title
- Content
- IsMandatory
- IsRead
我在某处读到使用存储库返回DTO不是一个好主意。
但在这种情况下会更好吗?我需要担心这种方法吗?我做错了什么?
答案 0 :(得分:1)
DTO 的概念实际上源于 DAO 模式,该模式已在DDD(域驱动设计)中被域对象
这意味着DDD的纯存储库模式建议返回域对象,如果LinQ和持久性无知,实际上意味着POCO 实体需要(这是C#中DDD的推荐方法)。
这意味着您只需拥有这些POCO,并在DTO的角色中使用它们在层之间传递数据,在存储库内的LinQ中持久化,并作为存储库本身的参数。
所有用途的这种一致性是一种理想的质量,并且使得重构,可读性和代码清晰度变得容易实现。
如果您需要添加行为(如MessageToUserDto
中所述),请不要忘记您可以从其他人那里获得POCO ......