6

我正在使用 ADO.NET 2.0 和 C#、Sql Server 2005 设计数据访问层。我经常与我的大脑争夺这些调用的位置。对于可维护的健壮代码,我应该遵循以下哪种方式。

方法一

Public Class Company
{

public string CompanyId
{get;set;}

public string CompanyAddress
{get;set;}

public bool Create()
{
}

public bool Update()
{
}

public bool Delete()
{
}

}

方法二

Public Class Company
{

public string CompanyId
{get;set;}

public string CompanyAddress
{get;set;}
}

我会使用像下面这样的另一个类来进行核心数据访问。像下面

Public Class CompanyRepository
{

public Company CreateCompany(string companyId,string companyDescription)
{
}

public bool UpdateCompany(Company updateCompany)
{
}

public bool DeleteCompany(string companyId)
{
}

public List<Company> FindById(string id)
{
}


}
4

3 回答 3

7

使用方法 2。从数据源读取/写入数据不是 Company 类的职责单一职责原则)。但是,我什至会创建一个ICompanyRepository接口,然后CompanyRepository为该接口创建一个实现。这样,您可以将 ICompanyRepository 注入需要保存/检索公司信息的类中。它还允许更轻松的单元测试和在未来创建不同实现的能力(从数据库切换到 xml 文件或其他)。

于 2012-01-15T13:42:51.530 回答
2

如果您遵循关注点分离的原则,您将使用您的方法 2。

在不同的类中拥有不同的职责确实有助于创建可测试、可维护的代码。

这也产生了更小、更有凝聚力的类,这些类更容易编写、推理和检查正确性。

请注意,您可以使用ORM而不是手工制作数据访问层。

于 2012-01-15T13:38:26.757 回答
1

我会支持第二选择,因为

  • 首先你创建你的data holder
  • 装箱后operational unit

因此,在这种情况下,您可以将数据与对其进行操作的函数分开,从而UnitTesting显着简化代码的不同域之间的职责分配,并可能轻松定位错误。

于 2012-01-15T13:41:43.790 回答