Помещение объекта в сеанс через свойство в ASP.NET - PullRequest
1 голос
/ 21 апреля 2009

Кажется, это может быть плохой идеей, но я не могу понять, почему:

У меня есть класс cXYZ со свойствами A, B и C. У него также есть метод sGetData, который загружает эти три свойства из базы данных, и метод sSaveData, который сохраняет его обратно.

class cXYZ

  public property A as string...
  public property B as string...
  public property B as string..

  public sub sGetData()...
  public sub sSaveData()...

end class

Веб-форма имеет следующее свойство:

private property xyz() as cXYZ
get
    return session("myXYZ")
end get
set (value as cXYZ)
    session("myXYZ")=value
end set
end property

И следующие события:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

if not ispostback() then
    xyz=new cXYZ()
end if

end sub

Protected Sub ButtonLoad_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonLoad.Click

   //Can now reference the class
  txtA.text=xyz.A
  txtB.text=xyz.B
  txtC.text=xyz.C

end sub


 Protected Sub ButtonSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSave.Click

  //Can now reference the class
  xyz.A=txtA.text
  xyz.B=txtA.text
  xyz.C=txtC.text

  xyz.sSaveData()

end sub

Я вижу некоторые издержки с сериализацией / десериализацией для каждой ссылки на свойство - возможно, стоило бы сделать это:

 Protected Sub ButtonSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSave.Click

  dim localxyz as cXYZ=xyz

  localxyz .A=txtA.text
  localxyz .B=txtA.text
  localxyz .C=txtC.text

  xyz=localxyz

end sub

Кроме этого, мнения о том, почему это хорошо или плохо? Класс не большой, он поддерживает состояние формы. Веб-формы отстой, и т. Д. Не очень полезно ..

Ответы [ 3 ]

0 голосов
/ 21 апреля 2009

Я бы улучшил это немного:

 private _xyz as cXYZ = nothing 

 private property xyz() as cXYZ 
   get
      if _xyz is nothing then _xyz = TryCast(session("myXYZ"), cXYZ)
      return _xyz
   end get 
   set (value as cXYZ)
      _xyz = value
      session("myXYZ")=_xyz 
   end set
end property
0 голосов
/ 21 апреля 2009

Пока ваш объект сериализуем, вы в порядке.

Просто не храните ссылки на неуправляемые объекты в своем сеансе - иначе у вас возникнут проблемы, когда вы перейдете из состояния сеанса «в процессе» в веб-ферму.

0 голосов
/ 21 апреля 2009

Я думаю, что все в порядке. Я хотел бы сохранить переменную для хранения объекта для повышения производительности.

Примерно так:

private _xyz as cXYZ = nothing 
private property xyz() as cXYZ 
   get
      if not _xyz is nothing then 
         return _xyz
      else
         return session("myXYZ")
      end if 
   end get 
   set (value as cXYZ)
      _xyz = value
      session("myXYZ")=value 
   end set
end property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...