кто-либо может обеспечить некоторое понимание относительно того, почему это?
Да, это - чрезвычайно сложный стандарт, который позволяет много материала, который никто действительно не использует сегодня.:)
там кто-либо известные и доказанные regexps, которые на самом деле делают это полностью?
Вот одна попытка проанализировать целый стандарт полностью...
http://ex-parrot.com/~pdw/Mail-RFC822-Address.html
, Каковы некоторые хорошие альтернативы использованию regexps для соответствия адресам электронной почты?
Используя существующую платформу для него на любом языке, который Вы используете, я предполагаю? Хотя те будут, вероятно, использовать regexp внутренне. Это - сложная строка. Regexps разработаны для парсинга сложных строк, так, чтобы действительно был лучший выбор.
Редактирование : Я должен добавить, что regexp, с которым я связался, был только для забавы. Я не подтверждаю использование комплекса regexp как этот - некоторые люди говорят, что, "если Ваш regexp является больше чем одной строкой, это, как гарантируют, будет иметь ошибку в нем где-нибудь". Я связался с ним, чтобы проиллюстрировать, насколько сложный стандарт.
Подход, который вы ищете, представляет собой некий механизм привязки данных, который связывает значения объекта (вы можете загрузить из базы данных, если она уже существует) с вашей веб-формой asp.net.
В основном у вас будет следующее:
Page.IsPostback
, и если да, вы создаете новый объект и заполняете его значениями, введенными пользователем. Это будет выглядеть так (я пишу это из головы без компилятора, поэтому будьте осторожны :))
public partial class MyPage : Page
{
private Person myPersonObj;
protected void Page_Load(...)
{
if(!Page.IsPostback)
{
//this is not a postback, so you may load an object based on an ID (i.e. in QueryString or create a new one
myPersonObj = new Person();
}
else
{
//it is a postback, so unbind the values
myPersonObj = new Person();
Unbind(); //the myPersonObj will be filled, the values are managed by ASP.net in the ViewState
}
}
//caution, overriding Page.DataBind()
private override void DataBind()
{
textBoxFirstname.Text = myPersonObj.FirstName;
...
}
private void Unbind()
{
myPersonObj.FirstName = textBoxFirstname.Text;
}
protected void btnSubmit_OnClick(...)
{
if(Page.IsValid)
{
Save();
}
}
private void Save()
{
//ideal layering with Interfaces
IPersonBL personBL = MyBLFactory.Get<IPersonBL>();
personBL.SavePerson(myPersonObj); //call the BL for further validation and then persisting
}
}
То, что я хотел добавить вчера, Вы также можете хранить свои объекты в ViewState или Session, как описано другими, но я испытал, что это следует делать как можно реже из-за следующих «недостатков» (с моей точки зрения):
Преимущество подхода "привязки данных", который я описал, заключается в том, что вы этого не делаете. есть эти проблемы, с «недостатком» - каждый раз иметь новый свежий объект. Следовательно, вы должны позаботиться об управлении состоянием вашего объекта, то есть вручную сохранять идентификаторы через циклы и т. Д.
Другой вариант - сохранить объект в кэше с использованием уникального ключа (например, «пользователь» + идентификатор ) и сохранить его только в текущем сеансе или в ViewState. Затем во время обратной передачи вы можете получить объект из кеша.
При таком подходе у вас есть несколько преимуществ:
В пользовательском интерфейсе Сделайте это
UserDetail userDetail = new UserDetail();
//do your stuff
userDetail = UserBL.TransferUserData(userDetail);
//do your stuff
В BL
public static UserDetail TransferUserData(UserDetail userDetail )
{
// do your processing on userDetail
return UserDAL.TransferUserData(userDetail);
}
В DAL
public static UserDetail TransferUserData(UserDetail userDetail)
{
//do your processing of db
return userDetail;
}
Вы можете сохранить объект в ViewState, это будет хранилище для конкретной страницы. Затем объект будет сериализован и введен в состояние просмотра страницы, что приведет к увеличению страницы.
Сохраняя объект в сеансе, вы уменьшаете размер страницы, но потребляете ресурсы памяти сервера.
В качестве альтернативы вы можете прочитать объект. из базы данных каждый раз. Это будет иметь то преимущество, что пользователю будет отображаться именно то, что было сохранено в базе данных.