«Условные» поля в бритвенных страницах - PullRequest
0 голосов
/ 30 января 2020

Я делаю ASP NET CORE Razor Pages, и у меня есть этот класс

MyObject.cs

public class MyObject
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Val01 { get; set; }   
public string Val02 { get; set; }
//...
public string Val30 { get; set; }
}

И у меня есть 5 различных типов "MyObjects" у каждого есть различные комбинации свойств; например, «MyObject_ASD» использует Id, Name, Val01, Val02, Val05; но «MyObject_QWE» использует только Id, Name, Val11, Val13, Val17.

Мне нужно знать, каков наилучший / оптимальный способ реализации страницы, отображающей только поля выбранного «MyObject»

PS

В подходе MVC я использую пять _Create.cs html представлений, таких как _CreateASD.cs html, _CreateQWE.cs html с переключателем в контроллере.

            switch (type)
        {
            case MyObjectType.QWE:
                return PartialView("_CreateQWE", object);
            case MyObjectType.ASD:
                return PartialView("_CreateASD", object);
            case MyObjectType.ZXC:
                return PartialView("_CreateZXC", object);
        }

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Я предлагаю вам использовать класс наследования для создания нескольких похожих классов.

Это сделает ваш код чистым, более читабельным и простым в управлении.


В вашем случае, например:

Создайте базовый класс, а другие классы наследуют эту базу.

Контроллер:

// base class 
public class MyObject
{
    public int Id { get; set; }
    public string Name { get; set; }
}

// derived class
public class MyObjectA : MyObject
{
    public string Val01 { get; set; }
    public string Val02 { get; set; }
}
public class MyObjectB : MyObject
{
    public string Val03 { get; set; }
    public string Val04 { get; set; }
}
public class MyObjectC : MyObject
{
    public string Val05 { get; set; }
    public string Val06 { get; set; }
}

Вид:

switch (type)
{
   case MyObjectA :
      return PartialView("_CreateQWE", MyObjectA );
   case MyObjectB :
      return PartialView("_CreateASD", MyObjectB );
   case MyObjectC :
      return PartialView("_CreateZXC", MyObjectC );
}

или даже вы можете создайте свойство enums, чтобы различать guish ваши модалы.

0 голосов
/ 30 января 2020

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

...