0

传统智慧说不要从父级调用子命名空间。

假设我正在使用AutoMapper之类的工具将内容模型转换为 ASP.NET MVC 3 站点的视图模型。

我的目录结构类似于:

- Stuff.Content
    -Foo.cs
- Stuff.Content.Public
    -Controllers
        -FooController.cs
    -Models
        -FooViewModel.cs
    -Views
        -Foo
            -Index.cshtml
 - AutoMapperConfig.cs
 - Global.asax

在这种情况下, AutoMapperConfig.cs只是一个简单的静态类,带有一个静态方法来设置映射,如下所示:

public static class AutoMapperConfig
{
    public static void Configure()
    {
        Mapper.CreateMap<Foo, FooViewModel>();
    }
}

您会注意到我在公共项目的根目录中有AutoMapperConfig ,但它实际上调用了子命名空间 ( Stuff.Content.Public.Models )。

调用该子命名空间是否可以接受?AutoMapperConfig是否应该与视图模型一起存在于Models命名空间中?

看起来它在这个领域变得模糊,因为控制器命名空间中的控制器调用其兄弟模型命名空间被认为是正常的。

期待你的想法。谢谢。

4

1 回答 1

1

我不认为你现在的设计有什么问题。我个人将映射配置放入Mappings子文件夹文件夹中:

- Stuff.Content
    -Foo.cs
- Stuff.Content.Public
    -Controllers
        -FooController.cs
    -Models
        -FooViewModel.cs
    -Views
        -Foo
            -Index.cshtml
    -Mappings
        -AutoMapperConfig.cs
 - Global.asax

此外,我倾向于为每个域模型都有一个单独的映射文件定义。

-Mappings
   -MappingRegistry.cs
   -FooProfile.cs
   -BarProfile.cs
   -...

这是一个例子FooProfile.cs

public class FooProfile: Profile
{
    protected override void Configure()
    {
        CreateMap<Foo, FooViewModel>();
    }
}

MappingRegistry.cs

public static class MappingRegistry
{
    public static void Configure()
    {
        Mapper.Initialize(
            x => typeof(MappingRegistry)
                .Assembly
                .GetTypes()
                .Where(type => !type.IsAbstract && typeof(Profile).IsAssignableFrom(type))
                .ToList()
                .ForEach(type => x.AddProfile((Profile)Activator.CreateInstance(type)))
        );
    }
}
于 2012-05-04T06:18:48.787 回答