【问题标题】:Develop a web application framework in C#用 C# 开发 Web 应用程序框架
【发布时间】:2009-11-14 10:44:59
【问题描述】:

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

我的想法:

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

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

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

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#)。

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

问候

【问题讨论】:

  • 哇,听起来你正在建造一个大野兽。您是否探索过现有的开源 .NET 框架,您可以使用它而不是从头开始创建并插入 3rd 方组件?
  • 还没有。有一些好的替代品吗?这些只是我想分享的一些想法! :)
  • "Elegant" 和 XML 并没有真正结合在一起......
  • 你认为他们为什么不在一起?
  • 任何与 XSLT 相关的事情听起来都像是一场等待展开的噩梦。但我有偏见,我实际上不得不使用 XSLT。

标签: c# web-applications web-frameworks


【解决方案1】:

您是否考虑过扩展 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 并给自己带来很多痛苦;)

【讨论】:

  • 您的意思是 ASP.NET MVC (asp.net/mVC)?我喜欢 XSLT,所以这就是为什么我想把它作为我对 XHTML 的转换。然后我可以做任何我想做的事情,实现良好的严格 XHTML。
  • 我已经意识到我应该拥有的一些东西。但会尝试考虑我将使用什么模板和数据输出。
  • 查看 NHaml .net 库。从模板 POV 中使用非常好
【解决方案2】:

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

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

  1. ASP.NET MVC 以“Rails”为模型。
  2. SubText 项目
  3. SpringFramework.NET / NHibernate.NET
  4. 网络层
  5. 城堡项目
  6. CodePlex 上的各种 Web/框架
    • CommonLibrary.NET
    • 宣泄
    • MojoPortal

【讨论】:

    【解决方案3】:

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

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

    更新

    这才是真正的帮助:

    其他:

    【讨论】: