星期五下班前一时兴起,对MVC发表了一点看法。后来就想干脆弄个小东西来验证一些自己的想法帮组理清思路。所要源代码的免了,3个小时的急就章实在是乱得可以,既没有好的架构,也没有任何代码质量可言,主要是实现了对MVC的一点想法。所以拿出来大家给参考一下。申明:不是典型的MVC
在这里我参考了Web.Py的一些做法,首先我们将Url当作一种资源,一个典型的Url,如下:
http://www.x.com/Index/view/2007/10/21
我们将从/Index/Topic/2007/10/21开始的的部分看作是有语义的,这里将Index映射到Controller类Index,Topic则表示这一次调用的行为,也就是调用Index类的Topic方法。
后面的/2007/10/21则是参数。而这些参数作为View方法的参数被传递给Controller,也就是这里Topic方法可以重载,如果找不到参数相对应的方法就直接调用没有参数的Topic方法。
Index类被作为Controller,至于View,随便了,可以直接用StringTemplate或者其他任何模板引擎,图方便的话直接Redirect到ASPX页面也行。
使用的方法:
首先Copy SpectraAction.DLL到bin目录。然后在Web.Config里添加:
<configSections>
<sectionGroup name="SpectraAction">
<section name="Common" type="System.Configuration.SingleTagSectionHandler"/>
<section name="Urls" type="System.Configuration.DictionarySectionHandler"/>
</sectionGroup>
</configSections>
<SpectraAction>
<Common Base="/TestSpectra" DefaultAction="Proccess" Assembly="" />
<Urls>
<add key="/index" value="Controller.Index"/>
</Urls>
</SpectraAction>
在Url里面的项就是注册Url到Controller的映射关系的。Common里的Base定义了Url的基础,因为在很多时候在根下有一些目录比较特殊,为了不影响这些目录,所以设置了这个参数用来设置一个基础来避开。所以这里要从 /TestSpectra之后的部分才开始具备语义。
然后就是实现Controller.Index这个类:
最后我们在浏览器里输入 http://localhost/TestSpectra/Index
这个时候输出 Test 因为设置了默认的行为,所以自动调用了Proccess方法。
如果输入 :
http://localhost/TestSpectra/Index/Proccess/ActionA/
这个时候就会调用void Proccess(string A)这个方法,输出了字符串TestActionA
就是这个样子咯,模型的话随便什么都行,视图的话随便用什么模板引擎都行
在这里我参考了Web.Py的一些做法,首先我们将Url当作一种资源,一个典型的Url,如下:
http://www.x.com/Index/view/2007/10/21
我们将从/Index/Topic/2007/10/21开始的的部分看作是有语义的,这里将Index映射到Controller类Index,Topic则表示这一次调用的行为,也就是调用Index类的Topic方法。
后面的/2007/10/21则是参数。而这些参数作为View方法的参数被传递给Controller,也就是这里Topic方法可以重载,如果找不到参数相对应的方法就直接调用没有参数的Topic方法。
Index类被作为Controller,至于View,随便了,可以直接用StringTemplate或者其他任何模板引擎,图方便的话直接Redirect到ASPX页面也行。
使用的方法:
首先Copy SpectraAction.DLL到bin目录。然后在Web.Config里添加:
<configSections>
<sectionGroup name="SpectraAction">
<section name="Common" type="System.Configuration.SingleTagSectionHandler"/>
<section name="Urls" type="System.Configuration.DictionarySectionHandler"/>
</sectionGroup>
</configSections>
<SpectraAction>
<Common Base="/TestSpectra" DefaultAction="Proccess" Assembly="" />
<Urls>
<add key="/index" value="Controller.Index"/>
</Urls>
</SpectraAction>
在Url里面的项就是注册Url到Controller的映射关系的。Common里的Base定义了Url的基础,因为在很多时候在根下有一些目录比较特殊,为了不影响这些目录,所以设置了这个参数用来设置一个基础来避开。所以这里要从 /TestSpectra之后的部分才开始具备语义。
然后就是实现Controller.Index这个类:
1
namespace
Controller
2![](https://i-blog.csdnimg.cn/blog_migrate/9528e1366ce31ea7267b8e9ab6c9de9d.png)
{
3
public class Index:MasterController
4![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
{
5
public Index()
6![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
{
7
//
8
// TODO: 在此处添加构造函数逻辑
9
//
10
}
11
public void Proccess()
12![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
{
13
this.AppendText("Test");
14
}
15
public void Proccess(string A)
16![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
{
17
this.AppendText("Test"+A);
18
}
19
}
20
}
![](https://i-blog.csdnimg.cn/blog_migrate/170476bddbb51d8ba959c000fd508cbe.png)
2
![](https://i-blog.csdnimg.cn/blog_migrate/9528e1366ce31ea7267b8e9ab6c9de9d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2eeed44a73087c9a8b158e6f00ba72b3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
4
![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b824fffd0ddfc8363ecf6241aaaf567.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
6
![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b824fffd0ddfc8363ecf6241aaaf567.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
8
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
9
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
10
![](https://i-blog.csdnimg.cn/blog_migrate/66b369ebfa8df6f074671356507b6a9d.png)
11
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
12
![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b824fffd0ddfc8363ecf6241aaaf567.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
14
![](https://i-blog.csdnimg.cn/blog_migrate/66b369ebfa8df6f074671356507b6a9d.png)
15
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
16
![](https://i-blog.csdnimg.cn/blog_migrate/04b1170efd0b79d35dfee8c547d10499.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b824fffd0ddfc8363ecf6241aaaf567.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/56958a281dd3ce98870fdc0387af582e.png)
18
![](https://i-blog.csdnimg.cn/blog_migrate/66b369ebfa8df6f074671356507b6a9d.png)
19
![](https://i-blog.csdnimg.cn/blog_migrate/66b369ebfa8df6f074671356507b6a9d.png)
20
![](https://i-blog.csdnimg.cn/blog_migrate/b609d932331e57ddfd0da055a81ca824.png)
最后我们在浏览器里输入 http://localhost/TestSpectra/Index
这个时候输出 Test 因为设置了默认的行为,所以自动调用了Proccess方法。
如果输入 :
http://localhost/TestSpectra/Index/Proccess/ActionA/
这个时候就会调用void Proccess(string A)这个方法,输出了字符串TestActionA
就是这个样子咯,模型的话随便什么都行,视图的话随便用什么模板引擎都行
![](http://sc.chinaz.com/Files/pic/face/350_s.gif)