EF 代码优先映射的“状态对象” - 完全隐藏

本文关键字:状态对象 隐藏 对象 状态 代码 映射 EF | 更新日期: 2023-09-27 18:37:20

在经历了整整一周的纯粹沮丧之后,由于多次尝试使用 EF Code First 映射我的聚合而没有将其转换为完全贫血的域模型,我最近偶然发现了 Vaughn Vernon 的这篇博客文章,描述了一个漂亮的解决方案,它不涉及荒谬的映射尝试、"DAO"等,而是干净的域实体和状态对象,让 EF 完美地完成它的工作。

现在,该解决方案有一个小缺陷,我想知道是否有任何方法可以摆脱它:为了从客户端"隐藏"状态对象(并让它们只能由 EF 访问),Vaughn 将"State"访问器和"State constructor"表示为内部。当所有内容都推到一个只能从外部访问的单个库项目中时,这工作正常,但是在大多数情况下,域分布在多个模块等中,这意味着我必须将成员公开为公共 - 从而将域实体中的技术问题暴露给客户端(他们可以使用......或滥用)。

是否有可能隐藏客户端访问的状态对象

EF 代码优先映射的“状态对象” - 完全隐藏

你可以...

a) 将 [assembly:InternalsVisibleTo("FriendAssemblyName")] 程序集属性添加到您的AssemblyInfo.cs,只要您知道所有的朋友程序集,或者

b) 使用显式接口实现对未将对象强制转换为专用接口的用户隐藏属性,例如 IState<T>

c) 添加 [EditorBrowsable(EditorBrowsableState.Never)] 属性以对智能感知隐藏属性。