YaBlogEngine - 一个用 ASP.NET/C# 编写的微型博客引擎






4.94/5 (19投票s)
YaBlogEngine 是一个用 ASP.NET/C# 编写的微型博客引擎

引言
本文介绍了一个使用 ASP.NET 和 SQLServer 的非常小规模的博客引擎。这里的想法是了解如何使用适当的架构来实现一个基本的博客引擎。
背景
我一直是 C++ 程序员 5 年,主要编写处理图形、多媒体和网络领域的核心应用程序。之后,我开始使用 C# 和 WPF 编写 Windows 应用程序。最近,我开始使用 ASP.NET/C#/SqlServer 编写网站。在这个最近的项目中,我有很多机会学习 Web 开发。 在这里,我负责一项特定服务,从其数据层到其表示层。 虽然这里的架构没有遵循严格的 n 层方法,但这并没有阻止我学习和实现 Web 应用程序的 n 层架构。 当我的妻子问我 ASP.NET 中的工作原理时(她更多的是 Web 设计师而不是开发人员),我创建了这个小型的博客引擎来向她解释 ASP.NET 网站和 n 层架构的基础知识。
Using the Code
我们试图遵循适当的 n 层架构。最底层是数据层,其中包含 SqlServer 的表和存储过程。在此之上,我们有一个数据访问层 (DAL)。 此数据访问层是作为一个单独的解决方案创建的,因此 DAL 中的更改只需要重新编译 DAL,而不需要重新编译整个网站。 此外,此解决方案之外的其他区域的更改也不会要求重新编译 DAL。 在 DAL 之上,我们有业务逻辑层 (BLL)。 出于同样的原因,它也是一个单独的解决方案,表示层是一个包含在 BLL 之上运行的 ASP.NET 页面的网站。

数据层
我们需要做的第一件事是规划我们将要使用的数据库模式。 这是我创建的数据库模式的快照。

除了模式之外,我还创建了一些用于数据库上常见操作的存储过程。 我喜欢为所有数据库操作使用存储过程的想法,因为它是访问数据库的最安全方式(从 SQL 注入的角度来看)。 如果你问我,实现数据库操作的最佳方法是
- 存储过程
- 执行参数化命令
- 通过
string
连接动态创建查询(仅当我绝对必须这样做时,因为这是最糟糕的方式,所以我通常会避免它)
因此,我们在此应用程序中拥有的存储过程是

数据访问层 (DAL)
数据访问层与数据库通信,检索结果,并以DataSets
或DataTables
的形式将其传递给业务逻辑层。 DAL 包含以下类

此 DAL 中的各个类负责与相应的数据库表通信。 常用函数移入类Functions
中。
业务逻辑层 (BLL)
BLL 负责根据用户界面的请求处理数据,并进行一些需要执行的额外检查和操作。 我们 BLL 中的主要类是

表示层
表示层包含用户可以访问的 Web 窗体。 表示层分为两个区域,一个供普通用户浏览博客条目,另一个供管理员添加/更改博客条目、类别和/或元数据。(请参阅源代码了解详细实现。) 我没有为这个小型网站使用表单身份验证或 Windows 身份验证,而是将用户记录在我的数据库中,并通过编程方式对其进行身份验证和授权。 这是我做出的设计决定(可能不是一个好的决定),但也可以实现更优雅的解决方案(因为这里的核心思想是在 n 层应用程序中学习数据访问,所以我没有这样做)。
该网站以两种模式运行
- 用户模式 - 在编译 BLL 和 DLL 后简单地运行该网站
- 管理模式 - 运行该网站。 在 URL 中添加 /admin 以进入管理模式(用户名:admin,密码:12345)
关注点
这项练习背后的想法是了解和实现面向初学者的 n 层数据访问架构。 但我已准备好接受建议并添加改进,以便可以进一步改进该引擎。
历史
- 2012 年 2 月 9 日:YaBlogEngine 的第 1 版已实现