我正在构建一个项目,该项目从sql和其他数据源以及mongo db中的存储中获取数据。
我有映射到文档的类,例如:
public class Event
{
public virtual int Id { get; set; }
public virtual int Name { get; set; }
public virtual int Description { get; set; }
public virtual IEnumerable<string> Attendees { get; set; }
}
注 - 标记为虚拟的属性,因为这些类也用于nhibernate映射(在某些情况下)
然后,我们有一个单独的用户类/集合:
public class User
{
public virtual int Id { get; set; }
public virtual int FirstName { get; set; }
public virtual int LastName { get; set; }
}
在我的应用程序中,我有一个EventController,它返回一个事件列表。 我也希望“真正的”水合用户回来参加我的活动。
所以,目前,我在不同的项目/命名空间中有上述两个类 - 事件和用户。在这种情况下,它们位于MyApp.DTOs
中然后我有另一个名为MyApp.Model的命名空间
哪个附近有重复的课程
public class Event
{
public virtual int Id { get; set; }
public virtual int Name { get; set; }
public virtual int Description { get; set; }
public virtual IEnumerable<User> Attendees { get; set; }
}
public class User
{
public virtual int Id { get; set; }
public virtual int FirstName { get; set; }
public virtual int LastName { get; set; }
}
然后,为了保持我的控制器的瘦,我有一个返回Model.Event的事件服务,并将存储库/ db逻辑封装在那里:
获取活动文件(DTOs.Event) 获取用户文档(DTOs.User) 使用automapper创建Model.User
我只是想知道是否有更好的方法,因为这会导致很多重复的代码!
答案 0 :(得分:2)
不幸的是,为了让您的模型与您的域不同,您需要进行一些代码重复,尤其是在您的DTO与您的模型匹配的大部分时间。
它主要是一种偏好,但我相信模型应该暴露给您的视图,并且对域或映射的nh对象没有任何作用。