zoukankan      html  css  js  c++  java
  • 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那会死的很惨。那么它们之间转换就成了很现实的问题,后面会介绍。

  • 相关阅读:
    CodingSouls团队项目冲刺(4)-个人概况
    第八周周总结
    CodingSouls团队项目冲刺(3)-个人概况
    CodingSouls团队项目冲刺(2)-个人概况
    线程中的join使用
    向线程传递数据的三种方法
    Java collections使用介绍
    Guava Collections使用介绍[超级强大]
    重构改善既有代码的设计--重新组织数据
    重构改善既有代码的设计--在对象之间搬移特性
  • 原文地址:https://www.cnblogs.com/yuanhuaming/p/1669383.html
Copyright © 2011-2022 走看看