Asp.Net MVC 体验 1

技术选择: LINQ , ASP.NET MVC , EntLib4

 

通过一段时间对MVC的学习,觉得学习难度比webform简单多了。

我边学习边写了一个【知道】,第一篇就写个开发过程中碰到的问题吧。

 

先列出企业级项目开发需要考虑的几个问题?

数据访问层

业务逻辑层(包含数据验证)

UI层

权限

异常处理

日志管理

缓存策略

工作流

通知系统

报表

最常见的就是前7种了。

 

那么在使用中碰到了什么问题呢?

1. Unity 使用

现在IOC容器实在太丰富了,学习起来也很简单,基本花个时间看点文档就掌握了。在使用上没给我带来多大的烦恼。

总的感受下来就2句话:

想用代码写配置的,情考虑下如何创建项目,否则会造成循环引用。

想用XML写配置的,情仔细一点。

 

2.如何统一客户端和服务端验证?

ASP.NET MVC 2博客系列之二:模型验证

http://blog.joycode.com/scottgu/archive/2010/02/08/115873.joy

看了这篇文章,就跟Entlib的差不多嘛。

我对这种验证方式有以下疑问:

1.验证过于分散。model的属性越多越明显。

2.感觉对attribute过多反而影响阅读,总让我怀疑其内部实现是否影响性能。

我觉得还是dinner里的验证方式比较和我口味,把它改成链式的方法更佳了。也可以很容易改成JS验证。

 

3.MVC的实体类如何绑定?

有2种:

1.使用UpdateModel() 方法更新一个已存在的模型对象的属性

2.实体对象作为action方法的参数

 

它还提供了一种可以显示的申明可更新的属性列表

string[] allowedProperties = new[]{ "Title", "Description",

"ContactPhone", "Address",

"EventDate", "Latitude",

"Longitude"};

UpdateModel(dinner, allowedProperties);

 

作为传递给Action方法的参数 – 模型对象也支持[Bind]属性,允许指定include list或者允许的属性列表,如下所示:

// POST: /Dinners/Create

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Create( [Bind(Include="Title,Address")] Dinner dinner ) {

...

}

 

4.ViewData , TempData, ViewModel的区别?

ViewData

ViewData 弱类型。生命周期和View相同, 只对当前View有效.

TempData

TempData 弱类型。TempData的生命周期是由Controll决定的

保存在Session中, Controller每次执行请求的时候会从Session中获取TempData并删除Session, 获取完TempData数据后虽然保存在内部的字典对象中,但是TempData集合的每个条目访问一次后就从字典表中删除。

ViewModel

ViewModel一个泛型的对象,通过传入具体实体类,来获取类中的属性。

在实际使用中应尽量扬长避短。

 参考 http://www.cnblogs.com/zhuqil/archive/2010/08/03/Passing-Data-from-Controllers-to-View.html

 

5.如何解决DTO<=>domain model 之间的转换?

这个问题一直困扰我的大问题,一些ORM也搞出了POCO试图解决这个问题。实际开发中我们只能尽可能的减少DTO的存在,以目前的ORM能力不使用DTO那会死的很惨。那么它们之间转换就成了很现实的问题,后面会介绍。

posted @ 2010-02-19 14:11  疯流成性  阅读(603)  评论(0编辑  收藏  举报