golang实现iris框架最小功能的mvc

转载自:http://wwhl.wang/#/article?id=16

0.先安装安装iris库。

通过go get  github.com/kataras/iris安装iris库,如下图

golang实现iris框架最小功能的mvc_第1张图片

MVC是什么?


Model(模型):它是应用程序的主体部分,主要包括业务逻辑,数据操作和数据模型;

View(视图):用户与之交互的界面;

Controller(控制器):接收来自界面的请求并交给模型进行处理;

Iris实现MVC的目录结构:


datamodels:放所有的模型
repositories:数据库的增删改查抽象成一个数据库类,这些数据库类都放在这里,跟datamodels一一对应
services:业务逻辑代码放这里,跟datamodels中的文件一一对应

其中datamodels,repositories,services从概念上可以抽象为整个models。
web
----controllers:所有的控制器都放这里
----views:存放MVC所有模板结合golang的project目录规范,project需有pkg,bin,src目录,

main.go:入口文件,初始化项目,引导项目启动

现阶段整个project的目录如下图:

golang实现iris框架最小功能的mvc_第2张图片
main.go代码如下:

package main

import "github.com/kataras/iris"

func main(){
	app := iris.New()
	app.Logger().SetLevel("debug")
	app.RegisterView(iris.HTML("./web/views",".html"))
	//注册控制器
//控制器此时暂未实现,后面补上
	app.Run(
		iris.Addr("localhost:8080"))
}

1.在datamodels下创建一个movie.go,其代码如下:

package datamodels

type Movie struct {
	Name string
}

2.实现其数据库相关操作

在repositories中创建一个movie_repository.go,其代码如下:

package repositories

import "datamodels"

type MovieRepository interface {
	GetMovieName() string
}

type MovieManager struct{
}

func NewMovieManager() MovieRepository{
	return &MovieManager{}
}

func (m *MovieManager) GetMovieName() string{
	//模拟赋值给模型,一般是从数据库获取数据
	movie := &datamodels.Movie{Name:"风语咒"}
	return movie.Name
}

3.创建movie_service.go文件,其代码如下:

package services

import (
	"fmt"
	"repositories"
)

type MovieService interface {
	ShowMovieName() string
}

type MovieServiceManger struct {
	repo repositories.MovieRepository
}

func NewMovieServiceManger(repo repositories.MovieRepository) MovieService{
	return &MovieServiceManger{repo:repo}
}

func (m *MovieServiceManger) ShowMovieName() string{
	fmt.Println("我们获取到的视频名称为:" + m.repo.GetMovieName())
	return "我们获取到的视频名称为:" + m.repo.GetMovieName()
}

4.在目录views下创建文件夹movie,movie下创建index.html文件,其内容如下:

{{.}}

5.在controllers目录下创建movie_controller.go文件,其代码如下:

package controllers

import (
	"github.com/kataras/iris/mvc"
	"repositories"
	"services"
)

type MovieController struct {

}

func (c *MovieController) Get() mvc.View{
	movieReposiroty := repositories.NewMovieManager()
	movieService := services.NewMovieServiceManger(movieReposiroty)
	MoiveResult := movieService.ShowMovieName()
	return mvc.View{
		Name:"movie/index.html",
		Data:MoiveResult,
	}
}

6.在main.go中注册控制器,最终main.go的代码如下:

package main

import (
	"github.com/kataras/iris"
	"github.com/kataras/iris/mvc"
	"web/controllers"
)

func main(){
	app := iris.New()
	//设置日志级别
	app.Logger().SetLevel("debug")
	//注册控制器
	mvc.New(app.Party("hello")).Handle(new(controllers.MovieController))
	//注册模板目录,views目录下所有html文件都当成模板
	app.RegisterView(iris.HTML("D:/workspace/go/aigo-iris/src/web/views",".html"))
	app.Run(iris.Addr("localhost:8080"))
}

最终整个project的目录如下:

 

7.执行main.go文件,并在浏览器地址栏输入:http://localhost:8080/hello,正常的话,会出现如下图的界面

golang实现iris框架最小功能的mvc_第3张图片

不过人家很正常的事情,在我这里总会遇到各种各样的问题,遇到的问题及解决方案如下:
一、各种依赖问题,如下图(只截部分依赖问题的图)

golang实现iris框架最小功能的mvc_第4张图片

解决方案:
详见

你可能感兴趣的:(golang)