• TodoList开发笔记 – Part Ⅱ


    上一节给出了应用的两个主要UML类图,应用采用的技术也给出了,这一节开始实际设计编码

    一.应用公开的方法

    其实就几个的方法而已

    1.代办事项的CRUD

    2.代办事项归类目录的CRUD

    3.代表事项“已完成”的更改。

    二.MVC如何应用到系统中

    引入MVC框架是为了更好的抽象应用程序各个模块,强制将应用程序分为三个大部分(Model-View-Controller),那么我们的应用在MVC框架下各个模块是怎么存放的呢?

    Model: TodoCatalog、TodoEvent
    View:

    其实我们在一个页面(视图)就可以完成所有操作,这个页面应该展示事项列表,

    并将我们的页面操作提交到Controller,接受结果再显示。

    Controller: 控制器应该公开许多方法,再由页面请求调用并返回结果。

    要说简单吧,其实也就3个类,一个HTML文件就可以搞定这事了。

    三.初步了解ASP.Net MVC

    3.1 路由系统

      ASP.Net MVC的路由系统相当强大,它使用一种约定成俗的命名规则来确定由哪个模块/方法提供服务,非常灵活。

    其实MVC的路由系统使用IHttpHandler也可以做到类似的效果,但它做的事情不止这些,它还能帮助我们把HTTP请求的数据包装为实体对象,比如客户端使用表单提交了一个Json数据,只要Json的属性名跟我们定义的实体类对得上(不区分大小写),那么在请求处理方法的参数里我们可以直接这么写

    /// <summary>
    /// 保存代表事项
    /// </summary>
    public JsonResult SaveEvent(TodoEvent todoEvent)

    注意跟IHttpHandler一样,MVC的路由处理配置也是可以配置的。

    当你新建一个MVC项目时,默认的Global.asax文件(继承HttpApplication),在ApplicationStar的时候就调用了路由的配置代码RouteConfig.RegisterRoutes。

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "TodoList", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

    如上,我让Default路由指向了Url为 “域名/TodoList/Index”,那么默认访问的第一个页面就是由TodoListController的Index方法给出的。

    3.2 视图引擎Razor

    MVC采用全新的杂交水稻方式开发视图界面,基于Razor的@语法,我们可以直接在编写HTML时直接访问C#的代码,非常灵活的解决了Model与View数据传输与展示的问题。

    比如我们的TodlList列出所有代办事项时可以这么写,妈妈再也不用担心我加班了!

    @
    {
        foreach (var catalog in catalogs)
        {
        <div class="div_catalog">
            <!--归类名称-->
            <div class="div_catalogName">@catalog.CatalogName</div>
            <!--归类下所有代办事项-->
            @foreach (TodoEvent todo in catalog.Events.Values)
            {
                <div class="div_todoevent">
                    @todo.Summary
                </div>
            }
        </div>
        }
    }

    其实简单说Razor就是把原先蹩脚的<% %> 用 @ 取代了,关于它的细节可以参考

    Razor 语法

    3.3 数据验证

    有了Razor跟路由系统足够我们很快写出这个应用的后台了,为了方便编码,MVC还提供了其他的一些特性,比如数据验证。

    在表单数据提交的时候,不管桌面软件还是Web应用,默认客户端都是不可信的,对于客户端提交的数据都会进行严格的验证。

    然而数据验证的代码其实大部分千篇一律,为了消除这些重复劳动,MVC提供了几个Attribute给我们实体的属性作为验证,比如限制一个属性必须填写、一个属性必须在某个范围内,可以使用如下Attribute

    [Required]     //必填字段
    public string ProductName{ get; set;}
    
    [Range(0,1000)]    //整型
    或者
    [Range(typeof(decimal),"0.00","49.99")]    //decimal类型
    public decimal Price{ get; set;}

    详细的Attribute可以参考

    MVC 数据验证

    四.项目结构

    了解了基本的MVC知识后我做出了如下的项目结构,非常简单

    服务端主要就是一个Controller包含所有操作方法,一个Index的视图作为主界面,DataBase、DataContext和Entity是属于数据访问层的,因为项目比较小就没分出来了。

    其实服务端工作量挺少的,就不贴代码了,下一节直接编写客户端。

  • 相关阅读:
    水波图实现原理
    程序员
    从输入URL到页面加载的全过程
    前端性能优化的七大手段
    图片懒加载
    蚂蚁庄园
    关于一个无极限分类的问题
    微信JS-SDK的一点小注意
    PHP进行AES/ECB/PKCS7 padding加密的例子(mcrypt)
    PHP进行AES/ECB/PKCS7 padding加密的例子(openssl)
  • 原文地址:https://www.cnblogs.com/MigCoder/p/3750357.html
Copyright © 2020-2023  润新知