例如:我需要在数据库中的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并将其返回到视图。
这是对的吗?因为这些类只有不同的名称。
答案 0 :(得分:1)
这肯定是不正确的,你不应该这样做,这只是重复代码。只有当它们不同时才需要不同的类。假设您要在Web应用程序中显示“注释”,并且“注释”与“用户”实体相关联。然后,您只需创建组合两者属性的DTO类(如注释文本和用户名),而不是单独发送2个对象。然后,有时您需要更改Web应用程序中的模型以正确显示数据。例如,您希望将它们显示在网格中,要正确执行此操作,您需要在属性上分配一些属性,这是在Web应用程序中创建单独模型的一个很好的理由。如果您不需要更改类,则应重用现有类。但是即使在你的情况下改变CommentsViewModel有点可能是有益的 - 通常你不希望用户看到CommentId值(这是db内部的东西) - 所以你可以在[HiddenInput(DisplayValue = false)]中的这个字段,所以你可以使用Html .EditorForModel只是为了显示编辑器面板。但这是你的选择。
答案 1 :(得分:1)
为每个图层创建每个类肯定对大型项目有益。当我说大的时候,我的意思是超过5个开发人员,使用寿命为10年。在大型项目中,与其提供的好处相比,重复的缺点变得很小。
对于小型项目来说,这肯定是矫枉过正的。额外的重量会减慢您的速度,几乎没有任何好处。就像在为期2天的徒步旅行中打包7天的衣服一样。
项目越大,您的架构越正式。
话虽如此,这是我的建议:
Comment
。Comment
直接映射到CommentViewModel
。 More about the service layer Comment
没有“s”,因为只有代表集合的类才应该被命名为复数。