Как организовать мои методы в пользовательском интерфейсе в ASP.NET [Проблема проектирования] - PullRequest
1 голос
/ 18 апреля 2011

Прежде всего, я знаю, что это немного долго .. Но я просто хотел прояснить ситуацию здесь .. Спасибо всем за совет заранее:)

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

Что у меня есть:

  • 19 Таблицы в моей базе данных

  • 19 Классы Каждый класс соответствует таблице и имеет свойства, соответствующие столбцам данной таблицы.

  • 19x2 Страницы .. первые 19 страниц имеют соответствующие элементы управления вводом, которые позволяют мне вводить информацию для создания новой записи в таблице, отправляя ее через объект типа класса.

  • вторые 19 страниц предназначены для редактирования существующих записей в таблицах

Что мне нужно:

  • Для страниц первого типа (первые 19 страниц) требуются некоторые вспомогательные методы (например: сброс настроек, AddToTheDb)

  • Второй тип (остальные 19 страниц) нуждается в некоторых вспомогательных методах (например: определение идентификатора элемента для редактирования, обновление базы данных)

  • И, наконец, еще один набор методов, который будет общим для обоих типов страниц.

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

П.С.: Я не так хорош, поэтому, если вы что-то "в первую очередь должны иметь ..." или такие любезные советы, не стесняйтесь говорить то, что вы видите. Я был бы рад учиться у вас.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

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

Выполнение этого также решит вопрос о том, куда поместить вспомогательные методы.

UPDATE

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

Хитрость заключается в том, чтобы поместить весь код состояния пользовательского интерфейса в одно место и четко определить, какая логика управляет поведением. Никогда не устанавливайте свойство Visible или Enabled (или даже свойство Text) более чем в одном месте. Таким образом, логика понятна и может быть легко изменена.

Вот пример:

private void UpdateUI()
{
    bool isNewRecord = (contact.ContactId == 0);

    statusLabel.Text = isNewRecord ? "Create New Contact" : "Edit " + contact.Name;
    nameTextBox.Visible = isNewRecord;

    bool isBusiness = contactTypeBusinessRadioButton.IsChecked;

    spouseCheckBox.Visible = !isBusiness;
    bool hasSpouse = !isBusiness & spouseCheckBox.IsChecked;

    spouseNameTextBox.Visible = hasSpouse;
}

Тогда весь ваш код события пользовательского интерфейса выглядит следующим образом:

protected void spouseCheckBox_Click(object sender, EventArgs args)
{
    UpdateUI();
}

Или с каким-то явным контролем состояния, например:

protected void addPhoneButton_Click(object sender, EventArgs args)
{
    contact.Phones.Add(new Phone());
    UpdateUI();
}

Точно так же очень важно, чтобы все данные считывания / записи в пользовательском интерфейсе происходили в одном месте, независимо от состояния:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
         int contactId;
         if (int.TryParse(Request.QueryString["contactid"], out contactId))
             contact = Contact.Load(contactId);
         else
             contact = new ContactId();
         DisplayContact(contact);  // Only one method to display new or existing record.
    }
}

protected void saveButton_Click(object sender, EventArgs args)
{
    ReadContactFromPage(contact); // Only one method to read the screen.
    contact.Save();
}

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

1 голос
/ 18 апреля 2011

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

Теперь, как совет, не переусердствуйте, чем меньше кода, тем лучше. Хороший, чистый, легкий для понимания код гораздо ценнее.

...