【问题标题】:Business object methods业务对象方法
【发布时间】:2016-05-18 15:44:21
【问题描述】:

我只是好奇是否应该将我的年龄方法放入我的 POCO 类中,或者将此方法留在我的业务层中。

现在我有 4 层:

  • 业务对象(BO)
  • 数据访问层 (DAL)
  • 用户界面(UI)
  • 服务。

现在我想查询年龄超过 13 岁的用户。所以我正在讨论是否应该在 BO 的 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);
        }
    }

【问题讨论】:

标签: c# asp.net-mvc-4 asp.net-web-api2


【解决方案1】:

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

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

换句话说:您的服务可以与业务实体一起使用,同时它专门化返回给 UI 的对象。这样做是为了将业务域中的信息架构与 UI 中的信息架构(可以是业务实体的聚合或来自特定实体的部分信息)解耦。

在信息结构方面,UI 的更改量往往比后端多。通过执行建议的分离,您不必为 UI 中的每次更改都重新构建业务域。相反,您只需更改服务将 UI 所需信息组合在一起的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2010-11-07
    • 2011-02-02
    • 2016-08-10
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多