【问题标题】:N-tier Application Data ModelN 层应用数据模型
【发布时间】:2015-05-11 15:24:58
【问题描述】:

我使用 .NET 开发了一个更高级的 MVC 应用程序。我有四层。 UI 层、ServiceLayer、业务层和 DAL。 (我将 EF5 用于 DAL)

我为我的实体添加了一个项目。我的项目结构是这样的。

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

我想知道,我有时需要强类型类模型来返回方法。但它不是必须存储在数据库中。很快它就不是实体了。

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

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;}
}

【问题讨论】:

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


    【解决方案1】:

    我对您的应用程序并不了解,但这对我来说似乎太过分了。服务层、业务层和 DAL 几乎都是一回事。它们都是域的一部分。除非你有一个很好的理由不在这里讨论为什么你需要将这三个项目作为不同的项目,否则我会说你应该考虑尝试在适当的地方合并其中的一些。

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

    【讨论】:

    • 我将我的服务层(MyProject.Interfaces)用于移动应用程序。我将它托管在 IIS 上。我使用 BLL 进行各种业务操作。
    • 我同意 Chris Pratt 的观点,尽管我可能会将 DAL 作为一个单独的项目。 N-Teir 几年前不是已经过时了吗?!
    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多