DAL,BLL和Web层 - 为每个层创建相同的类?这是对的吗?

时间:2014-07-12 19:42:37

标签: asp.net-mvc

例如:我需要在数据库中的Comments表中显示注释。 所以在DAL项目中我有POCO类:

public class Comments
{
    public int CommentId { get; set; }
    public string Author { get; set; }
    public string Content { get; set; }
}

在BLL项目中,我有类(DTO - 数据传输对象):

public class CommentsDTO
{
    public int CommentId { get; set; }
    public string Author { get; set; }
    public string Content { get; set; }
}

所以我从DAL获得IEnumerable,转换为IEnumerable并将其返回给Web项目。

在Web项目中,我有课程:

public class CommentsViewModel
{
    public int CommentId { get; set; }
    public string Author { get; set; }
    public string Content { get; set; }
}

所以在Web项目中我从BLL获得IEnumerable,转换为IEnumerable并将其返回到视图。

这是对的吗?因为这些类只有不同的名称。

2 个答案:

答案 0 :(得分:1)

这肯定是不正确的,你不应该这样做,这只是重复代码。只有当它们不同时才需要不同的类。假设您要在Web应用程序中显示“注释”,并且“注释”与“用户”实体相关联。然后,您只需创建组合两者属性的DTO类(如注释文本和用户名),而不是单独发送2个对象。然后,有时您需要更改Web应用程序中的模型以正确显示数据。例如,您希望将它们显示在网格中,要正确执行此操作,您需要在属性上分配一些属性,这是在Web应用程序中创建单独模型的一个很好的理由。如果您不需要更改类,则应重用现有类。但是即使在你的情况下改变CommentsViewModel有点可能是有益的 - 通常你不希望用户看到CommentId值(这是db内部的东西) - 所以你可以在[HiddenInput(DisplayValue = false)]中的这个字段,所以你可以使用Html .EditorForModel只是为了显示编辑器面板。但这是你的选择。

答案 1 :(得分:1)

为每个图层创建每个类肯定对大型项目有益。当我说大的时候,我的意思是超过5个开发人员,使用寿命为10年。在大型项目中,与其提供的好处相比,重复的缺点变得很小。

对于小型项目来说,这肯定是矫枉过正的。额外的重量会减慢您的速度,几乎没有任何好处。就像在为期2天的徒步旅行中打包7天的衣服一样。

项目越大,您的架构越正式。

话虽如此,这是我的建议:

  • DAL和业务层应共享Comment
  • 如果您没有“服务层”,请松开DTO课程并将Comment直接映射到CommentViewModelMore about the service layer
  • 我说Comment没有“s”,因为只有代表集合的类才应该被命名为复数。