我对干净的建筑比较陌生,我遇到了存在主义的怀疑。
在多态性的情况下,干净的架构是否期望将每个实现视为具有自己的存储库的实体?
假设我们正在开发一个应用程序,用于存储用户动物数据用于兽医目的。我们有一个抽象类 Pet,然后有不同的实现,如 Dog、Cat、Snake 等。每个实现都有其自己的特殊性,这迫使我们将它们单独存储在数据库中。
我是否应该将每个宠物视为一个实体(狗、猫、蛇...)并为每个宠物实现一个存储库? 如果是这样,当我想对普通动物进行 CRUD 操作时,将有一个巨大的条件列表,具体取决于动物类型,以查看要使用哪个存储库。这正常吗?
免责声明:以下示例是用 Dart 编写的
例如:
Future<void> saveAnimal(Animal animal)async{
if(animal is Dog)
await _dogRepository.save(animal);
if(animal is Cat)
await _catRepository.save(animal);
if(animal is Snake)
await _snakeRepository.save(animal)
...
}
从罗伯特·马丁那里我听说多态性应该旨在减少这种情况。 来源: https://blog.cleancoder.com/uncle-bob/2021/03/06/ifElseSwitch.html
我考虑过在 Animal 中添加一个方法作为 save,但这取决于存储库,并且由于依赖倒置规则实体不能依赖于存储库。
例如:
abstract class Animal {
Future<void> save();
}
class Dog{
String name;
...
@override
Future<void> save() async {
final repository = DogRepository();
await repository.save(this);
}
清洁架构不需要您为每个实体拥有单独的存储库。它只要求遵循依赖规则,从而导致
在您的情况下,您可以在单个存储库中处理不同的宠物类型,甚至可以将所有宠物存储在一个数据库表中,具体取决于您想要为每种宠物类型存储的确切数据。
有关如何在清洁架构中正确实现存储库模式的更多方面,请参阅:https://youtu.be/pfhDO_hZixw