如何在asp.net mvc中正确地将大控制器动作分解为较小的部分



我目前正在与一个使用mongoDb的项目团队合作,它有一个名为Project的超级大实体,这个项目实体包含其他类,所有这些都应该作为一个项目插入一个动作中,例如:

public class Project
{
    public GeneralInfo BuildinGeneralInfo { get; set; }
    public List<ResidentalGeneralInfo> ResidentalGeneralInfo { get; set;     }
    public List<CommercialOffice> OfficeGeneralInfo { get; set; }
    public List<CommercialOffice> BusinessGeneralInfo { get; set; }
//etc...
}

,例如在GeneralInfo中我们有:

public class GeneralInfo
{
    public string Elevation { get; set; }
    public string ElevationEn { get; set; }
    public string Floors { get; set; }
    public DateTime BuildDate { get; set; }
    public string LandArea { get; set; } 
//etc...
}

我创建了一个方法,如下所示:

private GeneralInfo InsertGeneralInfo(string Elevation, string ElevationEn, string Floors, DateTime BuildDate, string LandArea, string ResidentalUnit, string BusinessUnit, string OfficeUnit, string ArchitectureStyle, string ArchitectureStyleEn, string StructureType, string StructureTypeEn, string ResidentalUnitInFloor, string BusinessUnitInFloor, string OfficeUnitInFloor, string Yard, string ParkingCapasity, string HeatCool, string HeatCoolEn, string Foundation)
    {
        var generalInfoObj = new GeneralInfo
        {
            Elevation = Elevation,
            ElevationEn = ElevationEn,
            Floors = Floors,
            BuildDate = BuildDate,
            LandArea = LandArea,
            ResidentalUnit = ResidentalUnit,
            BusinessUnit = BusinessUnit,
            OfficeUnit = OfficeUnit,
            ArchitectureStyle = ArchitectureStyle,
            ArchitectureStyleEn = ArchitectureStyleEn,
            StructureType = StructureType,
            StructureTypeEn = StructureTypeEn,
            ResidentalUnitInFloor = ResidentalUnitInFloor,
            BusinessUnitInFloor = BusinessUnitInFloor,
            OfficeUnitInFloor = OfficeUnitInFloor,
            Yard = Yard,
            ParkingCapasity = ParkingCapasity,
            HeatCool = HeatCool,
            HeatCoolEn = HeatCoolEn,
            Foundation = Foundation
        };
        return generalInfoObj;
    }

,然后在我的动作中使用它,像这样:

public ActionResult Create(GeneralInfo generalInfoModel)
    {
        var project = new Project();

        project.BuildinGeneralInfo = InsertGeneralInfo(generalInfoModel.Elevation, generalInfoModel.ElevationEn,
            generalInfoModel.Floors, generalInfoModel.BuildDate, generalInfoModel.LandArea,
            generalInfoModel.ResidentalUnit, generalInfoModel.BusinessUnit, generalInfoModel.OfficeUnit,
            generalInfoModel.ArchitectureStyle, generalInfoModel.ArchitectureStyleEn, generalInfoModel.StructureType,
            generalInfoModel.StructureTypeEn, generalInfoModel.ResidentalUnitInFloor, generalInfoModel.BusinessUnitInFloor,
            generalInfoModel.OfficeUnitInFloor, generalInfoModel.Yard, generalInfoModel.ParkingCapasity,
            generalInfoModel.HeatCool, generalInfoModel.HeatCoolEn, generalInfoModel.Foundation);
        return View();
    }

但是我觉得这可能是一个幼稚的实现,可能有比这更好的方法来破坏一个大的控制器动作,我很感激在这方面的任何帮助,最重要的是,我认为我的团队不应该使用这样的大实体,但我没有控制,我也很感谢任何评论,是否使用这样的实体是一个代码气味和糟糕的架构设计。

如果我理解正确,你得到generinfo类型的对象作为输入参数,然后使用另一种方法,创建相同类型的新对象,这是完全相同的输入一个,然后你把它分配给项目对象。这就像你把输入对象赋值给Project对象属性一样。

project.BuildinGeneralInfo = generalInfoModel;

也许我错过了什么,但看起来你把一切都搞复杂了。

最新更新