架构模型、DTO等MongoDB、MVC等



我正在构建一个项目,该项目从sql和其他数据源获取数据并存储在mongodb中。

我有映射到文档的类,例如:

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,它返回事件列表。我也希望"真正的"水合用户回来与我的活动。

因此,目前,我在一个不同的项目/名称空间中有上面两个类——Event和User。在这种情况下,它们在MyApp中。DTO

然后我有了另一个名为MyApp的命名空间。型号

其具有近乎重复的类

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的事件服务。事件,并在其中封装存储库/db逻辑:

获取事件文档(DTO.event)获取用户文档(DTO.user)使用automapper创建模型。用户

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

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

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

最新更新