2016-05-18 78 views
1

我只是好奇,如果我应该把我的年龄方法放入我的POCO类中,或将此方法留在业务层中。业务对象方法

现在我有4层:

  • BusinessObject的(BO)
  • 数据接取层(DAL)
  • 的UserInterface(UI)
  • 服务。

现在我想查询年龄在13岁以上的用户。所以我辩论是否应该在我的博POCO类中的方法,该方法返回用户的当前年龄,还是应该查询从我的业务层DOB如下

BO

public class Person:Base 
{ 
    public string FirstName { get; set; } 
    public string MiddleName { get; set; } 
    public string LastName { get; set; } 
    public DateTime DOB { get; set; } 

    public int Age 
    { 
     get 
     { 
      DateTime today = DateTime.Today; 
      int age = today.Year - DOB.Year; 
      return age; 
     } 
    } 
} 

业务层

public class PersonBLL 
{ 
     private PersonDAL db = null; 

     public PersonBLL() 
     { 
      db = new PersonDAL(new AppContext()); 
     } 
     public IEnumerable<Person> PersonGEAge(int age) 
     { 
      DateTime td = DateTime.Now; 
      DateTime birthday = DateTime.Now; 
      DateTime date = new DateTime(birthday.Year - age, td.Month, td.Day, 4, 5, 6); 
      return db.PersonDOB(date); 
     } 
    } 
+2

你的年龄计算错了!请参阅http://stackoverflow.com/questions/9/how-do-i-calculate-someones-age-in-c – Bas

+1

这个问题似乎更像是一个核心评论,它可能是更好的问了在http:// codereview.stackexchange.com –

+0

@DavidPine:问题不在于代码,而在于图层和实体设计。 – jgauffin

回答

3

您应该查询业务层(通过服务)以获取具有指定年龄的所有业务实体。然而

您的服务层可以返回的DTO包含一个Age属性,而不是DateOfBirth

换句话说:你的服务可以与商业实体合作,而它专门将其返回到用户界面的对象。这样做是为了将业务域中的信息模式与UI中的信息模式(可以是业务实体的聚合或来自特定实体的部分信息)分离。

当涉及到信息结构时,UI往往比后端具有更高的变化量。通过执行建议的分离,您不必为UI中的每个更改都重新构建业务域。相反,您只需更改该服务将UI所需的信息放在一起的方式。