设计模式 - 数据访问对象模式

栏目: IT技术 · 发布时间: 4年前

内容简介:数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。

数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。

  • 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作。
  • 数据访问对象实体类(Data Access Object concrete class) - 该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。
  • 模型对象/数值对象(Model Object/Value Object) - 该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。
package main

import "fmt"

type Student struct {
	Name   string
	RollNo int
}

func (s *Student) GetName() string {
	return s.Name
}

func (s *Student) SetName(name string) {
	s.Name = name
}

func (s *Student) GetRollNo() int {
	return s.RollNo
}

func (s *Student) SetRollNo(no int) {
	s.RollNo = no
}

type StudentDAO interface {
	GetAllStudents() []*Student
	GetStudent(int) *Student
	UpdateStudent(*Student)
}

type StudentDAOImpl struct {
	Students []*Student
}

func NewStudentDAOImpl() *StudentDAOImpl {
	return &StudentDAOImpl{
		Students: []*Student{
			&Student{Name: "Robert", RollNo: 1},
			&Student{Name: "John", RollNo: 2},
		},
	}
}

func (s *StudentDAOImpl) GetAllStudents() []*Student {
	return s.Students
}

func (s *StudentDAOImpl) GetStudent(no int) *Student {
	for _, s := range s.Students {
		if s.RollNo == no {
			return s
		}
	}

	return nil
}

func (s *StudentDAOImpl) UpdateStudent(student *Student) {
	for _, s := range s.Students {
		if s.RollNo == student.RollNo {
			s.SetName(student.Name)
			fmt.Println("Student: roll no", student.RollNo, "updated in the database")
		}
	}
}

func main() {
	var dao StudentDAO
	dao = NewStudentDAOImpl()
	for _, s := range dao.GetAllStudents() {
		fmt.Println("Student: ", s.Name, "with roll no", s.RollNo)
	}

	student := dao.GetStudent(dao.GetAllStudents()[0].RollNo)
	student.SetName("Michael")
	dao.UpdateStudent(student)

	fmt.Println(dao.GetStudent(student.RollNo))
}

以上所述就是小编给大家介绍的《设计模式 - 数据访问对象模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

服务设计与创新实践

服务设计与创新实践

宝莱恩 (Andy Polaine)、乐维亚 (Lavrans Lovlie)、里森 (Ben Reason) / 王国胜、张盈盈、付美平、赵芳 / 清华大学出版社 / 2015-6-1 / CNY 69.00

产品经济的时代渐行渐远,在以服务为主导的新经济时代,在强调体验和价值的互联网时代,如何才能做到提前想用户之所想?如何比用户想得更周到?如何设计可用、好用和体贴的服务?这些都可以从本书中找到答案。本书撷取以保险业为代表的金融服务、医疗服务、租车及其他种种服务案例,从概念到实践,有理有据地阐述了如何对服务进行重新设计?如何将用户体验和价值提前与产品设计融合在一起? 《服务设计与创新实践》适合产品......一起来看看 《服务设计与创新实践》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器