Vapor实战2 —MVC

作者: AbooJaner | 来源:发表于2016-10-06 10:22 被阅读117次

    Vapor网络框架的代码设计模式是遵循MVC的,新建文件的时候,你需要把它放进对应的文件夹,不然 vapor build 的时候会提示错误,看它的代码文件结构:

    // M
    .
    ├── App
    .   └── Models
    .       └── User.swift
    
    // V
    .
    ├── App
    └── Resources
        └── Views
             └── user.html
    
    // C
    .
    ├── App
    .   └── Controllers
    .       └── UserController.swift
    

    Model

    新建的数据模型类需要继承自 Fluent 框架里面的 Model 类,一方面是方便 JSON 数据的转化,另一方面是方便与数据库连接操作。

    继承自 Model 的类需要注意以下几点:

    • 必须添加一个 id 成员变量:var id:Node?
    • 必须实现以下2个方法:
      init(node: Node, in context: Context)
      
      func makeNode(context: Context)
      
    • 必须实现协议 Preparation 里面的2个方法,是用于做数据库操作的,如果不需进行数据库操作,直接空实现就可以了:
      func prepare(_ database: Database)
      
      func revert(_ database: Database)
      

    View

    视图文件存放在文件夹 ResourcesView 子文件夹内,它可以是 html 文件,也可以是标签型语言的文件,模板项目里面的视图文件则是 leaf 后缀的。

    视图文件写好之后,则可以通过 drop.view.make() 函数访问,例如:

    drop.get("html") { request in 
      return try drop.view.make("index.html")
    }
    

    Controller

    控制器主要是方便代码解耦,把不同的业务逻辑放到不同的控制器里面。

    一个简单的控制器可以像下面那样:

    final class HelloController { 
        func sayHello(_ req: Request) throws -> ResponseRepresentable { 
           guard let name = req.data["name"] else { 
                throw Abort.badRequest 
           } 
          return "Hello, \(name)" 
        }
    }
    

    然后在 main.swift 声明以上控制器方法:

    let hc = HelloController();
    drop.get("hello", hc.sayHello);
    

    这样运行项目就可以通过 http://{host}/hello 访问到 sayHello 方法了。

    demo

    https://github.com/AbooJan/VaporDemo

    相关文章

      网友评论

        本文标题:Vapor实战2 —MVC

        本文链接:https://www.haomeiwen.com/subject/hzmsyttx.html