使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层

简介: 原文:使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在数据访问层应用Repository模式来隔离对领域对象的细节操作是很有意义的。
原文: 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层

系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html

前言

在数据访问层应用Repository模式来隔离对领域对象的细节操作是很有意义的。它位于映射层之上作为对于数据进行CRUD操作的一个抽象层。在Repository模式中,我们可以像操作内存里的集合一样来操作数据,而Repository则负责把我们的操作更新到数据库中。

构建Repository

在构建Repository模式之前,我们先列举在我们项目中将要使用到的用例,由于我们项目的重点是Web Api,所以Repository的构建相对比较简单,并没有用泛型基类的方式来构建。

查询所有的科目,通过ID获得某个科目。

查询所有的课程以及关联的对象(导师和科目) 。

根据ID获取某个课程以及关联的对象(导师,学科以及参与该课程的学生)

查询所有的学生以及相关对象(参与的课程,课程所在学科,导师)

根据课程ID查询所有报读的学生信息

通过用户名查询学生

通过用户名和密码验证学生信息

为注册过的学生提供选课功能

学生和课程的CRUD

创建ILearningRepository接口来定义所有的用例:

public interface ILearningRepository
    {
        IQueryable<Subject> GetAllSubjects();
        Subject GetSubject(int subjectId);

        IQueryable<Course> GetCoursesBySubject(int subjectId);
        
        IQueryable<Course> GetAllCourses();
        Course GetCourse(int courseId);
        bool CourseExists(int courseId);

        IQueryable<Student> GetAllStudentsWithEnrollments();
        IQueryable<Student> GetAllStudentsSummary();

        IQueryable<Student> GetEnrolledStudentsInCourse(int courseId);
        Student GetStudentEnrollments(string userName);
        Student GetStudent(string userName);

        Tutor GetTutor(int tutorId);
        
        bool LoginStudent(string userName, string password);

        bool Insert(Student student);
        bool Update(Student originalStudent, Student updatedStudent);
        bool DeleteStudent(int id);

        int EnrollStudentInCourse(int studentId, int courseId, Enrollment enrollment);

        bool Insert(Course course);
        bool Update(Course originalCourse, Course updatedCourse);
        bool DeleteCourse(int id);

        bool SaveAll();
    }

上述的接口中已经包含了我们Api中所有需要的操作。特别说明一下在这里对于集合我们都返回IQueryable<>类型,因为这个类型能够做到按需查询,延迟加载——当我们进行多条件复合检索或者分页,排序的时候,IQueryable<>类型不会立即访问数据库,而是在集合被迭代的时候(在前台foreach展示数据的时候)才去数据库查询加载,这样可以提高访问性能,避免查询出一些不必要的数据。

现在我们新建“learningrepository”类实现ILearningRepository,在这里我给出部分实现,剩下的可以在本章最后下载源码获得:

public class LearningRepository : ILearningRepository
 {
     private LearningContext _ctx;
     public LearningRepository(LearningContext ctx)
     {
         _ctx = ctx;
     }
 
 public IQueryable&lt;Subject&gt; GetAllSubjects()
     {
         return _ctx.Subjects.AsQueryable();
     }
 
 /*Rest of methods implementation goes here....*/
  }

在learningrepository的构造函数中我们可以发现我们需求一个learningrepository类型来初始化我们的_ctx。这种设计模式叫做依赖注入,简单的来说就是对象的创建是通过第三方容器来实现的,而不是直接new。这样做有利于模块与模块间的耦合降低,关于更多依赖注入的信息,请参考:http://www.cnblogs.com/tylerdonet/p/3297915.html

总结

到此为止,我们的数据访问层就算基本完成了,Web Api的准备工作也就完了。从下一章开始,本次的主角Web Api就要闪亮登场了。

本章源码:http://yun.baidu.com/s/1o6wf1KQ

目录
相关文章
|
22天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
5天前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
23 12
|
11天前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
24天前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
56 12
|
16天前
|
缓存 API 开发者
构建高效后端服务:RESTful API设计原则与实践
【10月更文挑战第43天】在数字化时代的浪潮中,后端服务的稳定性和效率成为企业竞争力的关键。本文将深入探讨如何构建高效的后端服务,重点介绍RESTful API的设计原则和实践技巧,帮助开发者提升服务的可用性、可扩展性和安全性。通过实际代码示例,我们将展示如何将这些原则应用到日常开发工作中,以确保后端服务能够支撑起现代Web和移动应用的需求。
|
23天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
17天前
|
JSON API 开发者
构建高效API:后端开发中的RESTful最佳实践####
在数字化时代,API作为不同系统间通信的桥梁,其重要性日益凸显。本文将深入探讨RESTful API的设计原则与最佳实践,通过实际案例分析,揭示如何构建高效、可维护且易于使用的API接口,助力后端开发者提升项目质量与用户体验。 ####
|
19天前
|
缓存 JavaScript API
探索后端开发:构建高效API的艺术
【10月更文挑战第40天】本文深入探讨了后端开发的核心—构建高效且可维护的API。通过分析设计原则、技术选型、性能优化以及安全性考量,文章旨在为读者提供一套完整的方法论,以实现高质量API的开发。从理论到实践,我们不仅讨论了RESTful架构和GraphQL等技术的优劣,还涵盖了缓存策略、数据库优化等性能提升技巧。同时,安全性章节将引导读者如何保护API免受常见攻击。最后,通过一个实际的代码示例,展示了如何将这些概念应用于创建一个简洁而强大的API。
|
20天前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
23天前
|
存储 前端开发 搜索推荐
淘宝 1688 API 接口助力构建高效淘宝代购集运系统
在全球化商业背景下,淘宝代购集运业务蓬勃发展,满足了海外消费者对中国商品的需求。掌握淘宝1688 API接口是构建成功代购系统的關鍵。本文详细介绍如何利用API接口进行系统架构设计、商品数据同步、订单处理与物流集成,以及用户管理和客户服务,帮助你打造一个高效便捷的代购集运系统,实现商业价值与用户满意度的双赢。