用C#开发Web应用程序框架

时间:2009-11-14 10:45:00

标签: c# web-applications web-frameworks

我计划在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
  • 它需要是可插拔的,所以当我为有特殊需求的人创建一个web-app时,我不需要改变我的基础引擎库
  • 需要在
  • 中使用缓存和/或压缩技术
  • 它需要快速且线程安全并且正在执行
  • 需要调试日志记录
  • 如果将某种动态脚本(如IronPython)实现到数据/模型层中,以便将输出动态编写到XSLT,那将是很好的,因此可以快速进行调整,无需进入Visual Studio并调整我的DLL。

您是否有想法开始设置此类框架的最佳方式是什么?或者在C#中已经存在这样的框架了吗?

这是一个小小的想法,当你有表'Customer'和'Address',并且想要发布一个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!"

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

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

此致

3 个答案:

答案 0 :(得分:4)

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

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

这种方法将支持mysql,sql server,oracle等按照.NET库,具有security / auth,可以使用自定义路由来执行你的/ a / b / c - > /?id = 33映射,基于OO并且可以插入,缓存可以完成,因为它的基础是ASP.NET,并且可以在IIS上启用GZIP / DEFLATE压缩。

将xslt应用于数据/模型层听起来不是正确的地方 - 我会把它放得更接近视图层。

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

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

答案 1 :(得分:1)

开发任何框架(基于网络或不基于网络)都涉及大量工作。考虑Ruby的两个流行的Web框架“Rails”和Python的“Django”。它们由团队建造,相当​​广泛。你可以建立一个,但肯定会占用很多时间。

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

  1. ASP.NET MVC以“Rails”为模型。
  2. 子文字项目
  3. SpringFramework.NET / NHibernate.NET
  4. NetTiers
  5. Castle Project
  6. CodePlex上的各种Web /框架
    • CommonLibrary.NET
    • 宣泄
    • MojoPortal

答案 2 :(得分:0)

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

我可以向您发送包含如何使用它的示例代码的模块。

<强>更新

这是真正的帮助:

其他: