c# – 存储库和使用原始sql查询?
我正在努力了解如何最好地查询存储库.
现在让我通过循环的三个因素是: >返回数据类型 第1点 关于问题一: 我有许多方法的存储库返回实体和标量值的组合.这似乎导致“方法爆炸”.我应该总是返回一个Entity对象吗?我该如何查询只需要一列的对象? 第2点 第3点 请注意,我没有使用ORM,我只是在我的存储库中有原始sql. 更新 第1点: 现在我有一个大型存储库,它返回标量和实体类型对象的混合(所有相同的实体).我想如果我只使用GetUser(userId)方法并忘记编写只返回单列值的方法,我可以大大减少这个. 例如,如果我需要返回一个用户名,我可以调用GetUser(userId)方法来润滑User对象,然后在服务层中将其过滤到用户名. 另一种方法是使用某种我可以传递到Repository的QueryBuilder类,可以对其进行解析以生成正确的sql. 第2点 回顾这一点非常类似于第一点,我目前的解决方案是只获取所有表字段.这是性能和可维护性之间的权衡. 第3点 我需要提供某种where子句.我不确定这是否有意义通过规范或只是一个SQL字符串.我目前的解决方案是为这些类型创建新的方法,但我想要一些更通用的存储库 总的来说,仍然在研究这个……我希望能够听到更多关于这方面的信息,或者链接到书籍或参考文献,将这一切联系在一起. 解决方法
你可以对抗存储库方法爆炸,类似于你如何对抗其他SRP违规.您可以为同一实体创建另一个存储库.请参阅此answer以查找类似问题.
这不是DDD问题.域驱动设计不处理“行和列”.为加载域对象而加载的数据总是存在一些冗余,但您必须衡量这是否真的会影响您的性能.如果这确实是性能瓶颈而不是可能是域模型不正确的症状.
这又是一个数据访问问题. DDD中没有任何内容表明您的存储库无法将Specification转换为SQL查询.无论您是这样做还是迭代内存中的记录(只要存储库使用者只看到规范和存储库并且不知道实际的实现),由您决定. 关于’原始SQL与DDD中的ORM’,您可能会发现answer很有趣. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |