0

我打算在 C# 3.5 中开发自己的简单而优雅的 Web 应用程序框架。我有一些想法,但还不是最佳实践应该如何实施。也许你能帮忙?

我的想法:

  • 它是一个 C# 库 (DLL)
  • 它需要使用 XSLT 作为模板语言,所以 XML 必须是我的 data-/model-layer 的输出
  • 它需要连接到不同的数据库,如 MySQL en SQL Server 和 ODBC
  • 它需要是命令库,比如命令设计模式,所以我可以发布一个命令,其中包含一些分组到该命令的参数并执行“东西”
  • 来自 1 个帖子的所有命令和数据库操作都需要在 1 个事务中,因此所有内容都可以回滚
  • 它需要有一个安全/授权模型(什么是好的?)
  • 它需要某种 URL 解析,例如 /a/b/c 解析为 /?id=33
  • 它需要是可插拔的,因此当我为有特定需求的人创建网络应用程序时,我不需要更改我的基本引擎库
  • 它需要在内部具有缓存和/或压缩技术
  • 它需要快速、线程安全和执行
  • 它需要有调试日志
  • 如果能在数据/模型层中实现某种动态脚本(例如 IronPython),以便将我的输出动态脚本化到 XSLT,那就太好了,这样就可以快速进行调整,而无需进入 Visual Studio 并调整我的 DLL。

您是否知道开始建立这样一个框架的最佳方式是什么?还是在 C# 中已经有这样的框架?

这是一个小想法,当您拥有“客户”和“地址”表,并且您想发布一个 html 表单以将记录添加到数据库中并邮寄给他时,您需要在 1 个 postaction 中发布这些字段:

Customer.ACTION = add
Customer.Name = "John Smith"
Customer.Email = "john.smith@emailaddress.com"

Address.ACTION = add
Address.CustomerId = #Customer.ResultId#
Address.Street = "Mainstreet"
Address.Number = "1"

Mail.ACTION = send
Mail.AFTER = Customer
Mail.To = #Customer.Email#
Mail.From = "test@case.com"
Mail.Subject = "Welcome"
Mail.Body = "Welcome new customer!"

引擎接收帖子,并通过反射收集所需命令的类,在本例中为 DatabaseCommand 和 MailCommand 并运行它。你看,我想对排序使用某种排队。在这种情况下,客户命令必须是第一个,然后是邮件(请参阅 Mail.AFTER)和/或地址(请参阅依赖项#Customer.ResultId#)。

那么你对这个项目有什么想法呢?

问候

4

3 回答 3

4

您是否考虑过扩展 MVC 模型而不是从头开始?

不完全确定您要对 xslt 做什么 - 您是否想将其发送 xml 并将其转换回 html?如果是这样,您可以尝试继承 ActionResult 并让它使用标准的 .NET 库执行转换。

这种方法将根据 .NET 库支持 mysql、sql server、oracle 等,具有安全性/身份验证,可以使用自定义路由来执行您的 /a/b/c -> /?id=33 映射,基于 OO 并且可以是可插拔的,可以进行缓存,因为它的基础是 ASP.NET,并且可以在 IIS 上启用 GZIP/DEFLATE 压缩。

将 xslt 应用到数据/模型层听起来并不合适——我会把它放在离视图层更近的地方。

关于您的 POST 数据,您可以选择使用标准 MVC 方式来处理这个动词,否则听起来您想要一个基于 RESTful 的架构http://en.wikipedia.org/wiki/Representational_State_Transfer

当然,您总是可以只继承 IHttpHandler 并给自己带来很多痛苦;)

于 2009-11-14T11:02:43.187 回答
1

开发任何框架(无论是否基于 Web)都涉及大量工作。考虑 Ruby 的 2 个流行的 Web 框架“Rails”和 Python 的“Django”。它们是由一个团队构建的,并且非常广泛。您可以构建一个,但肯定会占用大量时间。

我所知道的 .NET 的 Web 框架并不多,但以下是值得注意的(尽管它们可能不一定都是“Web 框架”):

  1. ASP.NET MVC 以“Rails”为模型。
  2. 子文本项目
  3. SpringFramework.NET / NHibernate.NET
  4. 网络层
  5. 城堡项目
  6. CodePlex 上的各种网络/框架
    • 公共图书馆.NET
    • 导泻
    • 魔力门户
于 2009-12-28T07:42:33.247 回答
0

对于 URL 解析,我最近在我现有的框架中实现了它。它利用了 ASP.Net 路由引擎。

我可以将模块发送给您,其中包含有关如何使用它的示例代码。

更新

这是真正的帮助:

其他:

于 2009-11-14T11:17:07.860 回答