repository - 对象模型中的 "Points of view"

标签 repository object-model facade

我们有两种域类型:用户位置

我们在 LocationRepository 上有一个方法:GetUserLocations()

现有的实现:

var user = UserRepository.GetUser(userId);
var locations = LocationRepository.GetUserLocations(userId);

对我来说,从 User 类型中检索与用户关联的位置更有意义,即:

var user = UserRepository.GetUser(userId);
var locations = user.GetLocations();

我认为后一种实现读起来更清晰,作为 API 客户端,我必须处理更少的类型(即不需要 LocationRepository)。另一方面,将有更多代码需要维护,因为我必须将“外观”写入 LocationRepository

我应该根据自己的直觉在 User 类型上为 LocationRepository 创建外观,还是应该满足于现状并接受序列图这对我来说“感觉”不对(即,位置信息的检索感觉就像是从错误的“观点”检索到的)?

最佳答案

我会从可维护性的角度来处理这个问题。我同意在 LocationRepository 上使用外观会“感觉不错”,并且可能会使代码更易读。

如您所说,权衡是需要维护更多代码。但是我们在谈论多少代码?是不是很多,要经常更新吗?或者你能不能写一次就忘掉它,让它很容易进行单元测试?如果是前者,就接受它,继续当前的实现,并提醒自己它并没有真正影响功能。如果是后者,可能值得在其他地方为那种良好的感觉和更具可读性的代码付出努力。

关于repository - 对象模型中的 "Points of view",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2113706/

相关文章:

mercurial - merge 两个不相关的 Mercurial 存储库后如何调整历史记录?

command-line - 哪种与 SourceSafe 交互的方式更快?命令行还是对象模型?

objective-c - 在拖放操作中传递对象指针

java - 用于隐藏 Java Web 服务的身份验证详细信息的外观

Facades 类中的 Laravel 常量

Git 从另一个没有历史记录的存储库中 pull

具有不同结构的 Git fork

spring - JpaRepository 删除子元素

sharepoint-2010 - 如何从 Sharepoint 2010 中的 SocialProfile 获取 SPUser 对象?