【问题标题】:Class Design and Collections类设计和集合
【发布时间】:2015-06-30 19:43:57
【问题描述】:

如果我有一个类定义为:

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(){}
}

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

public class CarCollection{};

这将返回汽车的集合。

现在有了通用列表,我明白我们不应该创建集合类,而是创建继承某些集合类型的对象的通用列表。

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

public List<Car> GetAllCars()
{
    ...
}

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

【问题讨论】:

  • 定义List&lt;Car&gt;你必须在哪里使用它,例如你可以在你的Main方法中定义它(对于控制台应用程序),如果你必须分享它,你可以分享List
  • 我需要从数据库中填充汽车列表,因此定义它的使用位置似乎不是正确的答案。我应该创建一个单独的数据访问类来定义 List 并填充它吗?
  • 是的,您可以这样做,从您负责访问数据库和获取记录的方法中返回 List&lt;Car&gt;

标签: c# .net class oop


【解决方案1】:

这一切都取决于您希望如何使用汽车收藏。但在您在评论中提到的场景中,我建议研究存储库模式,这将是业务逻辑和数据库之间的中间层。

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

   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
    }
   }

这只是为了让您了解如何做到这一点。更进一步,您可以扩展这个概念,引入接口以便于测试和交换存储库的实现。然后,您可以拥有具有多个实现的单个接口 - 一个用于从 DB 中读取,例如第二个用于从 XML 文件中读取。

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

【讨论】:

  • 谢谢@jjczopek。我一直在寻找一些好的阅读材料。我应该使用什么搜索词来查找此材料。我找不到任何优质材料。
  • 试一试:codeproject.com/Articles/631668/… 它指的是 MVC,但这个概念不仅限于 MVC 和 Web 应用程序,而是可以在任何地方使用。
猜你喜欢
  • 1970-01-01
  • 2020-06-23
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 2010-10-04
  • 1970-01-01
  • 2011-03-08
相关资源
最近更新 更多