Asp.Net MVC 体验 1
技术选择: LINQ , ASP.NET MVC , EntLib4
通过一段时间对MVC的学习,觉得学习难度比webform简单多了。
我边学习边写了一个【知道】,第一篇就写个开发过程中碰到的问题吧。
先列出企业级项目开发需要考虑的几个问题?
数据访问层
业务逻辑层(包含数据验证)
UI层
权限
异常处理
日志管理
缓存策略
工作流
通知系统
报表
最常见的就是前7种了。
那么在使用中碰到了什么问题呢?
1. Unity 使用
现在IOC容器实在太丰富了,学习起来也很简单,基本花个时间看点文档就掌握了。在使用上没给我带来多大的烦恼。
总的感受下来就2句话:
想用代码写配置的,情考虑下如何创建项目,否则会造成循环引用。
想用XML写配置的,情仔细一点。
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那会死的很惨。那么它们之间转换就成了很现实的问题,后面会介绍。