繁体   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