Как сделать неизменным BusinessLayer в Controller без изменения его свойств? - PullRequest
1 голос
/ 14 апреля 2019

У меня есть BusinessLayer, который содержит Коллекции и повторно используемый код в старом настольном приложении.

Теперь я хочу снова использовать этот слой в приложении MVC.Я пытаюсь использовать слой в Controller, например, Index ()

public ActionResult Index()
{
    if (Session["DataEntryLogic"] == null)
        Session["DataEntryLogic"] = new DataEntryLogic();

    var EntryLogic = Session["DataEntryLogic"] as DataEntryLogic;

    EntryLogic.Tables.Add(new Table());
    EntryLogic.Tables[0].TableID = "AccTransHed";
    EntryLogic.Tables[0].TableType = TableType.Master;
}

Теперь я хочу сохранить таблицы, которые я добавил в первой загрузке View.и сделайте его неизменным в следующих пост-спинах.Я использовал сессию.Я не знаю, следует ли вместо этого использовать ViewBag или ViewData.

Короче говоря: какой шаблон следует использовать для создания неизменяемого BusinessLayer?

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

Обновлено 2019/04/14

Должен ли я заменить все свойства и коллекции BusinessLogic на этот шаблон?

в приложении Windows:

pulic class EntryLogic{
   public List<Table> Tables{get;set;}
}

Для приложения MVC:

public class EntryLogic{
  public List<Table> Tables{
    get{
           if(Session["Tables"] == null)
              Session["Tables"] = new List<Table>();
           return Session["Tables"] as List<Table>;
      }
    set { Session["Tables"] = value;}
  }
}

Или Просто инициализировать экземпляр EntryLogic настольного приложения в переменной сеанса?

var EntryLogic = Session["EntryLogic"] as EntryLogic;

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

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

0 голосов
/ 14 апреля 2019

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

Это сводится к:

  • Являются ли коллекции одинаковыми для каждого пользователя?Если это так, то вы хотите инициализировать их при запуске приложения
  • Также статические переменные тоже самое.Используя статическую переменную, она будет распределена между всеми действиями и пользователями.
  • Если у каждого пользователя свой набор таблиц и ключей, и они различаются, то да Session может использоваться для хранения любой переменной, которую вы хотите.

Также:

  • ViewBag и ViewData совпадают.Вы можете использовать любой из них.

Это статический класс с коллекцией

enter image description here

Здесь вы инициализируете и заполняетеколлекция

enter image description here

И так вы используете свою коллекцию для контроллеров.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...