Web RSS Builder 第二部分:ASP.NET 应用程序
对开源 Web RSS 生成器的描述
引言
Web RSS Builder 是一款用于使用 Web 和 Silverlight 界面管理 RSS 文件的开源应用程序。当您需要使用 Web 应用程序管理服务器上的 RSS 文件时,此应用程序非常有用。
该应用程序托管在 CodePlex 上,网址为 http://WebRSSBuilder.codeplex.com。
这是三部分文章的第二部分,将介绍此应用程序
- Web RSS Builder 第一部分:ASP.NET 和 Silverlight 的通用 XML 数据源
- Web RSS Builder 第二部分:ASP.NET 应用程序
- Web RSS Builder 第三部分:Silverlight 应用程序
ASP.NET 界面
此应用程序将使用前面描述的核心组件来提供用于管理 RSS 文件的 Web 界面。首先,我们来看一下主页面的小型网站地图:
- 首页:查看用户负责的文件
- 查看 RSS:负责查看特定的 RSS 文件
- 管理 RSS 文件
- 管理角色
- 管理用户角色
- 管理用户
优先级是前三个,因为 ASP.NET 提供了 Web 界面来管理后三个,但仍然,将它们全部包含在同一个 Web 应用程序中会更好。
查看 RSS 网页
此网页将用于查看和编辑 RSSFeed
对象,因此将使用对象数据提供程序将 RSSFeed
对象绑定到 ASP 控件。对于 XML 数据源,通常我们可以使用 ASP.NET 附带的 XMLDataSource,我出于几个原因使用了对象数据源:
- 更简洁:从工程角度来看,将 UI 与应用程序逻辑解耦非常重要。使用此类控件会鼓励不良做法,因为您将不再拥有关注点分离,视图(网页)将包含业务逻辑。我猜微软在 XAML(WPF 和 Silverlight)和 ASP MVC 中的举措清楚地表明了一种负罪感。现在,他们正试图鼓励开发人员开始以不同的方式思考,并劝阻他们使用易于使用的拖放式数据源,这些数据源的初衷是为了让他们的生活更轻松,但从长远来看只会让事情变得更困难,应用程序难以测试和维护。
- 能够在不同的视图中重用绑定逻辑,这让我们回到第一个原因。
构建用于 RSS 文件的对象数据提供程序
现在,我们必须构建一个对象数据提供程序,它将封装核心组件提供的功能。对象数据提供程序应具有五个主要方法:Get、Get All、Update、Delete 和 Add。因此,我实现了 RSSObjectDataProvider
,该类将使用 RSSFeedXLinqController
来加载和保存 Feed 对象。该类包含:
- 暴露 Feed 对象属性的伪属性
- 使用
RSSFeedXLinqController
的加载和保存方法 - CRUD 方法,这些方法实现起来很简单,直接反映在通用
RSSItem
列表上的这些操作
此提供程序的代码非常简单。就是这样。
#region Object Data Provider CRUD Methods
[DataObjectMethod(DataObjectMethodType.Select)]
public ObservableCollection GetAllItems()
{
return this.Feed.Items;
}
[DataObjectMethod(DataObjectMethodType.Select)]
public RSSItem GetItem(String id)
{
for (int i = 0; i < Feed.Items.Count; i++)
if (Feed.Items[i].Title == id)
return this.Feed.Items[i];
return null;
}
...
网页
查看 RSS 网页
网页包含绑定到数据提供程序属性的 Textbox
、一个 Datagrid
和一个包含 RSS 项描述 HTML 编辑器的详细信息视图,该编辑器直接绑定到数据提供程序。我试图使代码隐藏尽可能少,但仍然需要将 Feed 的 URL 提供给对象数据提供程序,该 URL 将从会话变量中获取。我还缓存了对象数据提供程序以提高性能。此页面和整个应用程序使用 AJAX 来提供更好的用户体验,所有这些控件都嵌入在 UpdatePanel
中。

管理页面
至于其他网页,例如管理文件和管理角色,它们都使用 LinqDataProvider
完成,该提供程序使用从相应数据库表中生成的 Entity Framework 数据上下文。
下一篇文章
在下一篇文章中,我们将介绍 Silverlight 应用程序,它将提供与此应用程序在 Silverlight 中相同的功能。
你喜欢这篇文章吗?
如果你喜欢,请投票支持它。:)