2015-08-17 3 views
0

В настоящее время я работаю с командой, которая использует mongoDb для проекта, имеет один супер большой объект под названием Project, этот объект проекта содержит другие классы, и все это должно быть вставлено в одно действие как один проект, например:Как я могу правильно разбить большое действие контроллера на более мелкие куски в asp.net mvc?

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(); 
    } 

, но я чувствую, что это может быть наивная реализация и там может быть гораздо более эффективным подходом, то это за нарушение большого действия контроллера, я был бы признателен за любую помощь в этом отношении, и, кроме того, я думаю, что моя команда не должна использовать эту большую сущность, как это, но я не могу контролировать ее, я также хотел бы получить любые комментарии относительно того, является ли использование объекта, подобного этому, запахом кода и плохой дизайн архитектуры.

+1

Почему вы все это делаете? У вас есть экземпляр 'GeneralInfo' (параметр' generalInfoModel'). Все, что вам нужно, это 'project.BuildinGeneralInfo = generalInfoModel''. Весь ваш текущий код создает дубликат того, что у вас уже есть. –

+0

Вы правы, какая глупая ошибка, я на самом деле немного разочарован. – Deckard

ответ

1

Если я правильно понял, вы получаете объект типа GeneralInfo в качестве входного параметра, а затем используете другой метод, который создает новый объект того же типа, который точно такой же, как и входной, и затем присваивает его объекту Project. Это было бы так же, как если бы вы просто назначили входной объект объекту Project.

project.BuildinGeneralInfo = generalInfoModel; 

Возможно, я что-то пропустил, но похоже, что вы все сложнее.

Смежные вопросы