N层应用数据模型

时间:2015-05-11 15:24:58

标签: c# asp.net-mvc entity-framework n-tier-architecture

我用.NET开发了一个更复杂的MVC应用程序。我有四层。 UI层,ServiceLayer,业务层和DAL。 (我使用EF5进行DAL)

我为我的实体添加了一个项目。我的项目结构如此。

MyProject.DAL
MyProject.Interfaces
MyProject.Entities
MyProject.MvcWebUI
MyProject.BLL

我想知道,我有时需要为方法的返回强烈输入类模型。但它并不是数据库中必需的存储。很快,它不是一个实体。

例如我有产品实体。但我需要一个模型,它存储产品的状态和数量。应该怎么定位?

public enum ProdReviewResult
{
    Accepted = 1,
    Declined = 2,
    Banned = 4
}

//MyProject.DAL
//I need here return to strongly typed model
public List<object> GetProdReviewStatusByProdGroup(int userId, int prodGroupId)
{
    var query = from p in _db.Products
        join pg in _db.ProdGroups on p.ProdGroupId equals pg.ProdGroupId
        where pg.UserId == userId && p.UserId == userId
        group p by p
        into g
        select new {ProdViewResult = g.Key, ProdCount = g.Count()};

    var reviewStatus = new List<object>();
    foreach (var result in query)
    {
        reviewStatus.Add(new {result.ProdViewResult, result.ProdCount});
    }

    return reviewStatus;
}

//This class model for products to group by ProdReviewStatus.
//How should i locate in my project. 
public ProdReviewCount()
{
    public ProdReviewStatus ProdReviewStatus{get;set;}
    public int Count{get;set;}
}

1 个答案:

答案 0 :(得分:0)

我对你的申请并不了解,但这对我来说似乎过分了。服务层,业务层和DAL几乎完全相同。他们是域名的所有成员。除非你有一个很好的理由没有在这里讨论为什么你需要这三个不同的项目,我说你应该考虑尝试合并其中的一些。

那就是说,你所说的只是一个DTO(数据传输对象)。因此,根据您当前的结构,我说它应该与您的DAL项目一起使用。