存储库,删除对象,模型与ID

本文关键字:ID 模型 删除 存储 对象 | 更新日期: 2023-09-27 18:27:37

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

是否使用实体删除或通过ID进行删除?

public void Delete(Entity item);
VS.
public void Delete(int Id);

我只是想知道最好的做法是什么,我应该按实体删除(通过在删除之前先找到对象来实现)还是按Id删除(在方法上搜索对象,然后删除

存储库,删除对象,模型与ID

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

更新

此外,您可以向Lead添加两个世界都已断开连接,并且Model上定义的实体在客户端将不相同,因为您可以在proxy上向分部类添加属性,服务器端仅解释SOAP envelopemore the envelope is less in size more the communication is fast

进一步阅读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.

将域对象作为参数传递的问题是,您并不总是有一个实例,因此您被迫创建一个只有id的mock/partial对象,只是为了满足该方法,或者在删除对象之前检索对象。这两种方法都是低效且丑陋的。

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

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

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

按ID删除是您的最佳选择。

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

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

通常情况下,你可以发送给一个方法的信息越少,它就越清晰、更有表现力、更容易阅读。通过传递ID,你的方法就很清楚,它是根据实体的ID删除的。