我目前正在创建一个存储库,并想知道实体的删除操作的“最佳实践”是什么。在下面的选项中,make和model构成了Car实体的密钥。
选项1:
deleteCar(Car car)
选项2:
deleteCar(String make, String model)
选项3:
deleteCar(CarKey carKey)
起初我认为选项1,但实际上选项2似乎更吸引人(我不想在我只有id时才能获得一个对象,以便我可以将它传递给delete方法)。我把选项3放在一边,因为我已经看过类似的东西,但这对我来说似乎不对,因为CarKey实际上并不是一个域对象。
思想?
答案 0 :(得分:4)
选项3。
CarKey不是一个域对象(它可以是一个值对象)并不重要,只需要一个id就可以实现该动作。这是因为,如果Car是AR,那么存储库应该知道如何GetIt以及如何处理删除。
答案 1 :(得分:3)
如果严格遵守DDD中repository的定义,则选项1是可行的方式,因为存储库模拟内存中的集合。但是,我不认为它是存储库的关键组件,如果走得太远,可能会导致漏洞抽象。另一方面,要求实体对象完全删除可以表明存储库的调用者(例如应用程序服务)应该检索最初要由ID删除的实体,解决任何业务问题,并删除它们它。像Hibernate这样的ORM可以通过查询删除,因此您只需要ID来调用删除,但它最终会从数据库中加载实体。