假设我正在为C#中的产品经销商开发一个应用程序。

分销商执行以下3种类型的交易:

(1)缩进

(2)卖

(3)股票

我正在设计我的课程如下:

public abstract class Transaction
{
}

public class Indent : Transaction
{
}

public class Sell : Transaction
{
}    

public class Stock : Transaction
{
}

现在,如果我想将这三种类型的信息保存在三个单独的表中,那么我应该如何设计我的DA层?

我应该构建像

这样的单独的DA类
(1) IndentDA
(2) SellDA
(3) StockDA

或单个类 TransactionDA 并通过使用作为/ is 运算符检查其类型来执行CRUD操作?

或者我还能做什么?有什么建议吗?

有帮助吗?

解决方案

首先,如果您在类中创建了单个类TransactionDA并检查了类型以执行CRUD操作,那么您将违反开放/封闭原则,所以我绝对不会走那条路。

关于如何完成构建DAL的建议,我建议关注一些关于人们的博客文章,比他对这个话题的看法更聪明。

存储库是新的Singleton

存储库死了:Long Live Repository

生活资料库之夜

我相信谈话仍在继续,但这应该让你开始。

其他提示

我会使用像NHibernate这样的ORM并使用它的多表继承功能,然后不必自己担心。

我会在这里使用实体子类型。为交易创建一个表(正如之前的一张海报所说,也许一个不同的术语会更好)并存储那里常见的所有内容。然后创建一个“子类型”。每个专业化的表格。这些子类型表应具有与主表(“强”实体)相同的主键以及该特定专用所特有的字段。每个子类型以一对一的方式与强实体相关,可选择参与子类型端,并且需要参与强实体端。

然后,为了使查询更容易,定义一个视图(外部)将强实体与所有实体子类型连接起来,以便您可以轻松地“查看”一切。

这是一个简单(和常见)如何设置的示例:

create table Employee (
  eid        int primary key,
  first_name text,
  last_name  text not null
)

create table Salaried (
  eid             int primary key,
  annualSalaryUSD money not null
)

create table Hourly (
  eid             int primary key,
  hourlyRateUSD   money not null
)  

如果您知道您的数据分为三个单独的表,那么我通常会有三个不同的DA类。

但是,如果您的表几乎完全相同,那么您可以对TransactionDA进行通用化并简化数据层。我只会这样做,如果你知道你将有大量的交易,并将你的表分成不同的文件或其他东西,否则我可能只是简化事情并将它们结合起来。

除非所有单独的交易类型极其相似,否则请勿尝试创建TransactionDA。

您可以使用依赖注入,为每个创建一个DA类,并让它们在您的CRUD操作中实现相同的接口ITransactionDA。

public interface ITransactionDA
{
  void Read();
  void Update();
...
}

public class StockDA : ITransactionDA
{
  //implement interface methods
}

Stock stock = new Stock(new StockDA());

我会做那样的事情

public abstract class DistributerTransaction
{
    DistributerDA dataaccess;
}
public class Indent : DistributerTransaction
{
}
public class Sell : DistributerTransaction
{
}
public class Stock : DistributerTransaction
{
}

public abstract class DistributerDA
{
   /*Read();
     Update();*/
}
public class IndentDA : DistributerDA
{
}
public class SellDA : DistributerDA
{
}
public class StockDA : DistributerDA
{
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top