关于c#:类设计和集合

Class Design and Collections

如果我有一个类定义为:

1
2
3
4
5
6
7
8
public class Car{
    public int doors {get;set}
    public int wheels {get;set}
    public string make {get;set}
    public string model {get;set}

    public Car(){}
}

我想创建这个类的集合。过去,我知道创建集合类是可以接受的:

1
public class CarCollection{};

那将归还一批汽车。

对于泛型列表,我现在理解不应该创建集合类,而应该创建继承某些集合类型的对象的泛型列表。

我的问题是,这个代码应该放在哪里,这个方法应该有什么定义?例如,我应该向我的Car类添加一个公共方法:

1
2
3
4
public List<Car> GetAllCars()
{
    ...
}

如果是这样的话,实例化一个汽车类来获取汽车集合似乎很奇怪,但我知道将其声明为共享类也不是正确的选择。我们应该如何设计我们的类集合,以及应该在哪里包含它们?


这一切都取决于你想如何使用这些汽车。但是在您在注释中提到的场景中,我建议您研究存储库模式,它是业务逻辑和数据库之间的中间层。

因此,您可以将Car类作为模型,并使用存储库,例如:CarRepository。这个存储库将有一个返回所有汽车列表的方法。填充此列表的所有逻辑都将在该类中,并且不会污染应用程序的其他位置,并增加代码的可维护性。

1
2
3
4
5
6
7
8
9
   public class CarRepository {
    public List<Car> GetAllCars() {        
        // read data from DB and return list        
    }

    public Car GetSingle(int carId) {
        // here you just return single car
    }
   }

这只是想让你知道怎么做。更进一步,您可以扩展这个概念,引入接口以方便测试和交换存储库的实现。然后您可以拥有一个具有多个实现的单一接口——一个用于从数据库读取,另一个用于从XML文件读取。

网上有很多关于这方面的阅读材料。