在存储库中,最佳和最合乎逻辑的方法是什么?
使用实体删除或删除 ID ?
public void Delete(Entity item);
VS.
public void Delete(int Id);
我只是想知道什么是最佳做法,我应该通过Entity删除(通过在删除之前先找到对象来实现)或通过Id删除(在方法上搜索对象然后删除)。
答案 0 :(得分:3)
AFAK选择第二个选项public void Delete(int Id);
是最佳做法,如果您的ID
是primary Key
,将根据此ID检索或更新或删除实体,此外,如果您将您的存储库暴露给WebService( e.g like WCF)
调用带有int的服务将是快速且不那么乏味,然后使用实体调用
更新
此外,您可以向您的Lead添加两个世界都断开连接,并且模型上定义的实体在客户端上不一样,因为您可以在您的prox上为您的分部类添加属性,它只是{ {1}}将在服务器端解释 SOAP envelope
more the envelope is less in size more the communication is fast
答案 1 :(得分:3)
传递域对象作为参数的问题是你不总是有一个实例,所以你被迫创建一个只有id的模拟/部分对象,只是为了满足方法,或者你检索删除之前的对象。两者都是低效和丑陋的。
Delete方法通常只需要主键标识符来删除记录。
在某些情况下,我同时提供Delete(T)和DeleteByPk(int id)
在签名中暴露主要密钥的缺点是签名不同,因此琐碎的内部代码生成器需要足够聪明才能处理它。任何值得使用的第三方发电机都足够智能。
答案 2 :(得分:2)
按ID删除是最好的选择。
存储库模式是数据库技术的抽象,因此您可以将存储库API与数据库技术分离得越多越好。
例如,如果您想切换到MongoDB等文档数据库,那么您必须从存储库API中删除对实体的引用。
通常,您可以向方法发送的信息越少,信息越清晰,越有表现力,也越容易阅读。通过传递ID,您的方法非常清楚,它会根据实体的ID进行删除。