簡體   English   中英

如何在ASP.NET中的UI上組織我的方法[設計問題]

[英]How to organize my methods on the UI in ASP.NET [Design Problem]

首先,我知道它有點長..但是我只是想在這里做一個明確的案例..謝謝大家的建議:)

我已經嘗試了3天,以找出一種好的設計模式來組織我在Web應用程序的UI層中使用的方法..但我做對了!

我有的 :

  • 我數據庫中的19個表

  • 19個類每個類均對應一個表,並具有與該給定表的列相對應的屬性。

  • 19x2頁..前19頁具有適當的輸入控件,使我可以通過類類型的對象將其發送來輸入信息以在表中創建新記錄。

  • 后19頁用於編輯表中的現有記錄

我需要的 :

  • 第一種類型的頁面(前19頁)需要一些幫助方法(例如:重置控件,AddToTheDb)

  • 第二種類型(其他19頁)需要一些幫助方法(例如:確定要編輯的項目的ID,更新數據庫)

  • 最后是這兩種類型的頁面之間通用的另一套方法。

...我一直在使用界面來強制頁面定義這些方法,然后在答案中使用該方法來為我的19個頁面對使用的特定用途方法提供靈活的參數。

PS:我不是很好,所以如果您“首先應該擁有..”或類似的建議,請隨便說說您所看到的。 我很高興向您學習。

“首先應該具有”為每個同時創建和更新的類創建了一個頁面。 填充頁面時,兩個操作之間的任何字段都可以不同。 這將大大減少您必須維護的代碼量。 當將新事物添加到類中時,這也將變得更加容易,因為更改只需在一個地方進行。

這樣做還將解決有關將幫助方法放在何處的問題。

UPDATE

創建具有很多復雜狀態的用戶界面是很多人遇到的問題並且做得不好。 但是,有一種簡單的方法可以產生良好的效果。

訣竅是將所有UI狀態代碼放在一個位置,並明確說明哪種邏輯控制行為。 切勿在一個以上的地方設置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;
}

然后,您所有的UI事件代碼如下所示:

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

或像這樣的一些顯式狀態控制:

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

同樣,非常重要的是,無論狀態如何,所有對UI的數據讀/寫都在一個位置進行:

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();
}

顯然,對於UI的復雜部分(例如,開放式的事物列表),可以將顯示和輸入代碼分解為許多方法調用,但是關鍵是要從與之交互的更高層次中隱藏所有這些復雜性。頁面事件。

您可以創建其他將從其繼承的基頁類。 如果存在可以重復使用的通用功能,那可能是一個很好的起點。 不,如果您是直接編輯表,因為每個類都有一個類似的表,那么您可以使用某些框架或為更簡單的表創建通用的編輯功能。

現在作為建議,不要過度使用代碼越少越好。 簡潔易懂的代碼更有價值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM