【问题标题】:Repository, Deleting Object, Model vs ID [closed]存储库,删除对象,模型与 ID [关闭]
【发布时间】:2014-10-24 08:13:34
【问题描述】:

在存储库中,最好和最合乎逻辑的方法是什么?

使用实体删除还是通过ID删除?

public void Delete(Entity item);

VS.

public void Delete(int Id);

我只是想知道什么是最佳实践,我应该按实体删除(在删除之前先找到对象)还是按 ID 删除(在方法上搜索对象然后删除)。

【问题讨论】:

    标签: c# entity-framework wcf repository-pattern


    【解决方案1】:

    AFAK 选择第二个选项 public void Delete(int Id); 是最佳实践,毕竟如果您的 ID 是您的 primary Key,实体将根据此 ID 被检索、更新或删除,此外,如果您将存储库暴露给WebService( e.g like WCF) 使用 int 调用服务会比使用实体调用更快且不那么繁琐

    更新

    此外,您可以向您的潜在客户添加两个世界都是断开连接的,并且模型上定义的实体在客户端将不一样,因为您可以向代理上的部分类添加属性,它只是 @ 987654326@ 将在服务器端解释 more the envelope is less in size more the communication is fast

    Further Reading MSDN

    Windows Communication Foundation (WCF) is an XML-based communications infrastructure. Because XML data is commonly encoded in the standard text format defined in the XML 1.0 specification, connected systems developers and architects are typically concerned about the wire footprint (or size) of messages sent across the network, and the text-based encoding of XML poses special challenges for the efficient transfer of binary data.

    【讨论】:

    • 谢谢,您注意到网络服务是决定性的时刻
    • 将我的更新视为对你老板的附加论据 :)
    • TBH 消息大小似乎无关紧要,除非您的对象实际上是一个完整的图表,可能在图表中包含图表。主要论点是努力,当您只需要标识符时,为什么要强制调用者提供大量无关数据?
    • @ChrisMarisic 我部分同意你的观点,我的目标是说明保持 SOAP 信封的大小更好,这就是为什么使用二进制协议可以快速执行,因为数据更紧凑
    • @KamelBRAHIM +1 提到二进制文件,WCF 是为 TCP 构建的,似乎很少有人知道这一点(然后想知道为什么它不适合 Web 服务)
    【解决方案2】:

    将域对象作为参数传递的问题是你并不总是有一个实例,所以你不得不创建一个只有 id 的模拟/部分对象,只是为了满足方法,或者你检索对象在删除它之前。两者都低效且丑陋。

    Delete 方法通常只需要主键标识符即可删除记录。

    在某些情况下,我同时提供 Delete(T) 和 DeleteByPk(int id)

    在签名中公开主键的缺点是签名各不相同,因此琐碎的内部代码生成器需要足够聪明才能处理它。任何值得使用的第三部分生成器都足够智能。

    【讨论】:

      【解决方案3】:

      按 ID 删除是最好的选择。

      存储库模式是您的数据库技术的抽象,因此您可以将存储库 API 与数据库技术分离得越多越好。

      例如,如果您想切换到 MongoDB 等文档数据库,则必须从存储库 API 中删除对实体的引用。

      通常,您可以向方法发送的信息越少,它就越清晰、更具表现力且更易于阅读。通过传递 ID,您的方法很清楚它是根据实体的 ID 进行删除的。

      【讨论】:

      • then you'd have to remove references to the Entities from your repository API. 如果这是真的,那么您创建了毫无意义的抽象。良好的抽象与这种变化无关。
      猜你喜欢
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多