如果您从数据访问层返回到业务层的n层系统哪些对象如果您、对象、业务、数据

2023-09-03 08:56:20 作者:因为有遗憾 所以叫青春

如果你有,例如,一个数据库表名为Person(ID,姓名等),有什么样的对象应数据访问层返回到业务层? 我想是这样的:

If you have, for example, a database table called Person (ID,Name etc) what kind of object should the data access tier return to the business tier? I'm thinking something like this:

//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到业务层呢?

But this all seems a little cumbersome? Is there a more elegant solution to this problem? Should I return a DataRow from the data access layer to the business layer instead?

推荐答案

您不需要在数据访问层(DAL),重复类定义

You don't need to repeat the class definition in your data access layer (DAL).

您可以创建你的业务实体作为一个单独的程序集'哑巴'的容器,如您的Person类可以只是: -

You can create your business entities as 'dumb' containers in a separate assembly, e.g. your Person class can just be:-

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

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

Then, you can give your DAL a reference to the business entities layer. Your controller objects, whether they are in a separate business logic layer, or within your UI layer, can then just call the DAL, which can create a business entity, populate it from the database and return it to your controller.

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

This article by Imar Spaanjaars has a nice explanation of this pattern.