当DL需要返回BL类型时,如何构造一个简单的BL

时间:2010-08-20 20:27:13

标签: c#

我已经获得了我的DL项目抽象(对于我的DL而言是分开的)我有一个BL(单独的程序集)..其中有中间方法调用一些db层方法。但是其中一些DL方法需要返回一个类型,这个类型在我的BL中...会强制出现问题,一个循环引用。你是如何在模式方面处理这个问题的?

所以例如,如果我有一个假设的MyProject.DL在Car类中有以下方法:

internal List<Car> GetCars(Dealer dealer)
{
   // logic

}

和MyProject.BL需要调用该DL方法:

public List<Car> GetCars(Dealer dealer)
{
     MyProject.DL.GetCars(dealer);
}

4 个答案:

答案 0 :(得分:5)

我个人将其分开,所以我有三个程序集:

  • My.Project.DL
  • My.Project.BL
  • My.Project.Types

我会在My.Project.Types库中放置任何共享类型,只要它们不包含自己的逻辑,并且只由DL和BL库中的方法填充/操作

例如:

My.Project.Types

namespace My.Project
{
    public sealed class Car()
    {
        public int CarId { get; set; }
        public string CarName { get; set; }
    }
}

现在,My.Project.DLMy.Project.BL都会引用My.Project.Types程序集,从而从那里获取Car类型。请注意,我没有将Car类命名为名为My.Project.Types的命名空间,因为该命名空间是虚假的而且有点无意义,而是我将它们留在My.Project中,这更有意义

答案 1 :(得分:3)

如果您的应用程序足够大,请为DTO(您的返回类型)创建一个单独的项目,DL和BL都可以参与其中。

布赖恩

答案 2 :(得分:1)

数据层除了读取或写入数据之外什么都不做。了解业务逻辑的类型会严重损害此规则。 如果必须要返回这些类型,则应该在中间使用接口,或者将类型提取到单独的库中。

答案 3 :(得分:0)

目前,我们为同一个程序集中的每个类型都有DTO(类型)和DAL类,但在不同的名称空间下分组不同。 类型本身就是DTO,因为它们只包含类的结构。 DAL类具有持久性逻辑,业务层使用DTO。

就像上面提到的很多人一样,你也可以将这些类型转移到一个单独的程序集中,但这对我们来说同样合适。

从调用角度来看,业务层将调用相应的DAL来保存/检索其数据,DAL将调用使用信息填充类型/持久保存信息,然后将类型返回给业务实体。 / p>

编辑 - 添加了一个示例

业务实体对象 - UserBE

DAL类 - UserDA

DTO - UserDTO

要填充用户信息,userBE将调用userDA - 它返回填充了所请求信息的userDTO。此userDTO用于对userBE对象(即业务实体)进行通知,该对象现在填充了特定实例的数据。

所有命名约定仅供理解!! ; - )