例如,如果您有一个名为 Person(ID、Name 等)的数据库表,数据访问层应将什么样的对象返回给业务层?我在想这样的事情:

//data access tier
public class DataAccess{

   public interface IPerson{
      int ID{ get; set; }
      string Name{ get; set; }
   }

   internal class Person : IPerson{
      private int id;
      private string name;

      public int ID{ get{return id; } set{ id=value; } }
      public int Name{ get{retutn name; } set{ name=value; }
   }

   public static IPerson GetPerson(int personId)
   {
      //get person record from db, populate Person object
      return person;  
   }
}

//business tier
public class Person : IPerson{
   private int id;
   private string name;

   public int ID{ get{return id;} set{id=value;} }
   public string Name{ get{return name;} set{name=value;} }

   public void Populate(int personId){
      IPerson temp = DataAccess.GetPerson(personId);
      this.ID = temp.ID;
      this.Name = temp.Name;
   }
}

但这一切似乎有点麻烦?对于这个问题有更优雅的解决方案吗?我应该从数据访问层返回一个 DataRow 到业务层吗?

有帮助吗?

解决方案

您不必重复类定义你的数据访问层(DAL)。

您可以创建你的业务实体在单独的程序“哑巴”容器,例如您的Person类可以只是: -

public class Person
{
    int ID { get; set: }
    string Name { get; set: }
}

然后,你可以给你的DAL的业务实体层参考。你的控制器对象,无论他们是在一个单独的业务逻辑层,或你的UI层中,然后可以只是调用DAL,它可以创造一个商业实体,从数据库中填充它,然后它返回到您的控制器。

本文内蒙古自治区Spaanjaars 具有这种模式的一个很好的解释。

其他提示

您的业​​务层肯定不想了解数据行 - 尝试在数据层中保留数据特定的类。这减少了耦合,并让您可以在以后更改持久层,而无需大规模重新架构。

要解决您的具体问题,您可以:

  • 在数据层中创建基本数据对象/实体,并将它们传递给业务层以供使用。
  • 或者,正如您正在做的那样,创建 DTO(数据传输对象),它纯粹作为将数据从数据层传输到更高层中业务对象的更丰富实现的一种手段。您可以将其作为富域模型中存储库模式的一部分来执行。

您可能需要考虑的另一件事是层级 - 它会影响您对这些事情的看法。层通常是物理的,换句话说,它们定义了流程之间的边界。层通常是逻辑的,它们将程序的功能分成松散耦合的单元。在这种情况下,您的目标是图层。

如果您创建接口,您的DAO类,并把他们的业务层内,可以参考从数据访问层的业务层。在数据层返回DAO类从业务层对象。

您的业务层引用的直接引用数据访问对象的接口来代替。经由IoC容器依赖注入(如城堡温莎例如)将允许你做到这一点。

此技术被称为分离接口和这里描述:

http://www.martinfowler.com/eaaCatalog/separatedInterface.html

该技术我看到的最好的解释可以在本文上NHibernate的最佳实践,通过比利麦卡弗蒂写在被发现。

http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx

在制品具有很多的特定于NHiberbate信息,但良好的一半是在设计应用中松散耦合测试只是固体信息和容易单元。

作为该规则,即每一层具有松散地耦合到上层,加入BL参考DAL不是好主意。 它在DAL更好地定义数据模型的接口,使业务实体形式BL。 因为我的经验,它能够更好使用DAL和访问存储库在您的企业实体或业务流程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top