当前位置:  开发笔记 > 后端 > 正文

您应该将哪些对象从数据访问层返回到业务层和n层系统

如何解决《您应该将哪些对象从数据访问层返回到业务层和n层系统》经验,为你挑选了2个好方法。

例如,如果您有一个名为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从数据访问层返回到业务层吗?



1> Adam Ralph..:

您无需在数据访问层(DAL)中重复类定义.

您可以在单独的程序集中将业务实体创建为"哑"容器,例如,您的Person类可以是: -

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

然后,您可以为DAL提供对业务实体层的引用.您的控制器对象,无论它们是在单独的业务逻辑层中,还是在您的UI层中,都可以调用DAL,DAL可以创建业务实体,从数据库填充它并将其返回给您的控制器.

Imar Spaanjaars的这篇文章对这种模式有一个很好的解释.



2> flesh..:

您的业​​务层肯定不想了解数据行 - 尝试在数据层中保留特定于数据的类.这样可以减少耦合并使您可以在以后更改持久层,而无需进行批量重新构建.

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

在数据层中创建基本数据对象/实体,并将其移交给业务层以供使用.

或者,就像你正在做的那样,创建DTO(数据传输对象),它纯粹作为一种方法,将数据从数据层传输到更高层的业务对象的更丰富的实现.您可以将此作为富域模型中存储库模式的一部分.

您可能想要考虑的另一件事是层层次 - 这对您如何看待这些事情有所不同.层通常是物理的,换句话说,它们定义了流程之间的界限.图层通常是合乎逻辑的,它们将程序的功能分成松散耦合的单元.在这种情况下,您的目标是图层.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有