0

我正在推广一个从 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,它返回一个事件列表。我还希望“真正的”水合用户回来参加我的活动。

所以,目前,我在不同的项目/命名空间中有上述 2 个类 - 事件和用户。在这种情况下,它们位于 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 的事件服务,并在其中封装了存储库/数据库逻辑:

获取事件文档 (DTOs.Event) 获取用户文档 (DTOs.User) 使用 automapper 创建 Model.User

我只是想知道是否有更好的方法,因为这会导致大量重复代码!

4

1 回答 1

2

不幸的是,为了使您的模型与您的域不同,您需要进行一些代码重复,尤其是在大多数情况下您的 DTO 与您的模型匹配时。

它主要是一种偏好,但我认为模型应该暴露给您的视图,并且与域或映射的 nh 对象无关。

于 2012-08-20T21:49:25.633 回答