c# - 类构造函数和获取设计

标签 c# class constructor data-access

在设计类和构造函数时,我有一个关于获取记录的问题。

举个例子,如果我有汽车类别

public Car
{
    ...
}

我可以选择创建一个构造函数来获取汽车的某个实例,例如:

public Car(int carID)
{
    //Get car from database
}

或者我可以编写一个公共(public)方法来获取汽车:

public Car GetCarByID(int carID)
{
    //Get car from database
}

是否有获取类实例的首选(最佳实践)方法?代码看起来读起来更干净,可以获取对象的实例:

Car MyCar = new Car(5);

对比

Car MyCar = new Car();
MyCar.GetCarByID(5);

最佳答案

我建议将数据库访问与领域模型类(例如 Car)分开。

这可以通过将所有数据库访问检索操作放在它们自己的类集中来完成。这些被称为存储库。制作这些存储库有不同的方法。这取决于您的数据在数据库中的存储方式以及您是否使用 Entity Framework 。有些人更喜欢通用存储库,而另一些人则根本不喜欢这种通用方法。但最重要的是,存储库负责访问数据库以进行对象检索和存储。它不应该由域对象(即 Car 本身)完成,因为它应该只具有属于 Car 的操作以及使其成为 Car 对象的操作。将汽车存储在数据库中并不是汽车应该知道如何做的事情。

可以在此处找到使用存储库模式的示例: http://www.codeproject.com/Articles/688929/Repository-Pattern-and-Unit-of

MSDN 上还有一篇关于存储库模式的好文章: https://msdn.microsoft.com/en-us/library/ff649690.aspx?f=255&MSPPError=-2147217396

底线是使用存储库进行数据库访问。它用于从数据库加载和存储数据,并提供额外的抽象层。如果需要,您可以为每个存储库创建一个接口(interface),这也将允许您进行单元测试。

比在类中创建不属于该类的方法要好得多。

关于c# - 类构造函数和获取设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31326478/

相关文章:

我的第二堂课出现 Java 错误

使用生成器的 C# 构造对象

C++ "invalid constructor"

java - 实例化类不起作用,构造函数参数未传递

c# - 如何在 Visual Studio 中为 getter 和 setter 以及构造函数自动生成标准代码?

c# - NHibernate 在对持久实体调用 Session.Save 时不会抛出异常

Php 类(我认为)

Python - 从类 __init__ 方法调用函数时未定义全局名称

c# - PayU 集成网络服务 URL

双数的 C# 问题