TinyFrame升级之三:逻辑访问部分
在上一篇,我们打造了自己的数据访问部分,这篇,我们准备讲解如何打造逻辑访问部分。
在上一篇中,我们利用Repository模式构建了基于泛型的操作合集。由于这些操作的合集都是原子性的操作,也就是针对单表的操作,我们有必要为每个单表做增删改查操作,所以这里我们最好将泛型包装一下:
这里是IBook接口部分,它继承自IRepository接口,并承载了Book实体类
1: using TinyFrame.Data.DataRepository;
2: using TinyFrame.Data.DomainModel;
3:
4: namespace TinyFrame.Repository
5: {
6: public interface IBook:IRepository<Book>
7: {
8: }
9: }
这里是BookRepository实现部分,它继承自Repository<Book>和IBook接口:
1:
2: using TinyFrame.Data.DataRepository;
3: using TinyFrame.Data.DataContext;
4: using TinyFrame.Data.DomainModel;
5:
6: namespace TinyFrame.Repository
7: {
8: public class BookRepository:Repository<Book>,IBook
9: {
10: public BookRepository(IDbContext context)
11: : base(context)
12: {
13: this.context = context;
14: }
15:
16: private IDbContext context;
17: }
18: }
这样包装之后,在TinyFrame.Services中,我们就可以实现自己的业务逻辑了。
比如,对于存储的书籍来说,我们需要对其进行增删改查:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Linq.Expressions;
6: using TinyFrame.Data.DomainModel;
7:
8: namespace TinyFrame.Services
9: {
10: public interface IBookService
11: {
12: IList<BookPlace> GetAllPlaces();
13: BookPlace GetPlacesByBookID(int bookid);
14:
15: IList<BookType> GetAllTypes();
16: BookType GetTypesByBookID(int bookid);
17:
18: Book GetBook(int bookid);
19: IList<Book> GetAllBooks();
20: IList<Book> GetBooks(Expression<Func<Book,bool>> where);
21:
22: bool AddBook(Book book);
23: bool UpdateBook(Book book);
24: bool DeleteBook(Book book);
25: }
26: }
它的实现部分如下:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using TinyFrame.Data.DataUnitOfWork;
6: using TinyFrame.Repository;
7: using System.Linq.Expressions;
8: using TinyFrame.Data.DomainModel;
9:
10: namespace TinyFrame.Services
11: {
12: public class BookService:IBookService
13: {
14: public BookService(IUnitOfWork unitOfWork
15: , IBook bookRepository
16: , IBookType bookTypeRepository
17: , IBookPlace bookPlaceRepository
18: )
19: {
20: this.unitOfWork = unitOfWork;
21: this.bookRepository = bookRepository;
22: this.bookTypeRepository = bookTypeRepository;
23: this.bookPlaceRepository = bookPlaceRepository;
24: }
25:
26: private readonly IUnitOfWork unitOfWork;
27: private readonly IBook bookRepository;
28: private readonly IBookType bookTypeRepository;
29: private readonly IBookPlace bookPlaceRepository;
30:
31: public IList<BookPlace> GetAllPlaces()
32: {
33: return bookPlaceRepository.GetMany(m => m.ID >= 0).ToList();
34: }
35:
36: public BookPlace GetPlacesByBookID(int bookid)
37: {
38: int bookPlaceID = bookRepository.Get(m => m.ID == bookid).BookPlaceID;
39: return bookPlaceRepository.Get(m => m.ID == bookPlaceID);
40: }
41:
42: public IList<BookType> GetAllTypes()
43: {
44: return bookTypeRepository.GetMany(m => m.ID >= 0).ToList();
45: }
46:
47: public BookType GetTypesByBookID(int bookid)
48: {
49: int bookTypeID = bookRepository.Get(m => m.ID == bookid).BookTypeID;
50: return bookTypeRepository.Get(m => m.ID == bookTypeID);
51: }
52:
53: public Book GetBook(int bookid)
54: {
55: return bookRepository.Get(m=>m.ID==bookid);
56: }
57:
58: public IList<Book> GetAllBooks()
59: {
60: return bookRepository.GetMany(m => m.ID >= 0).ToList();
61: }
62:
63: public IList<Book> GetBooks(Expression<Func<Book, bool>> where)
64: {
65: return bookRepository.GetMany(where).ToList();
66: }
67:
68:
69: public bool AddBook(Book book)
70: {
71: try
72: {
73: bookRepository.Insert(book);
74: unitOfWork.Commit();
75: return true;
76: }
77: catch { return false; }
78: }
79:
80: public bool UpdateBook(Book book)
81: {
82: try
83: {
84: bookRepository.Update(book);
85: unitOfWork.Commit();
86: return true;
87: }
88: catch { return false; }
89: }
90:
91: public bool DeleteBook(Book book)
92: {
93: try
94: {
95: bookRepository.Delete(book);
96: unitOfWork.Commit();
97: return true;
98: }
99: catch { return false; }
100: }
101: }
102: }
通过上面的代码,我们就能够有效地控制逻辑部分,同时融合cache和log的话,基本上就可以随心所欲的控制了。
TinyFrame升级之三:逻辑访问部分的更多相关文章
- [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考
原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...
- Android OTA 升级之三:生成recovery.img
Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...
- centos7内核升级及curl访问https证书过期处理
centos7内核升级及curl访问https证书过期处理 先看下当前系统的linux内核版本 uname -r 3.10.0-229.el7.x86_64 升级步骤 1.rpm --import h ...
- TinyFrame升级之二:数据底层访问部分
在上一篇中,我列举了框架的整体结构,下面我们将一一说明: 首先需要说明的是TinyFrame.Data. 它主要用于处理数据库底层操作.包含EF CodeFirst,Repository,Unitof ...
- TinyFrame升级之八:实现简易插件化开发
本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...
- 【经验随笔】MYSQL表加锁升级导致数据库访问失败
背景:有一次定位问题发现,在同一个session连接中对MYSQL部分表加锁,导致其它未加锁的表不能访问. 用Spring管理MYSQL数据连接,在多线程访问数据库的情况下容易出问题.一个线程中对部分 ...
- TinyFrame升级之一:框架概览
由于之前的TinyFrame多于简单,并且只是说明原理,并无成型的框架出来,所以这次我把之前的知识进行了汇总,然后做出了这一版的TinyFrame框架. 整个框架的结构如下: TinyFrame.Da ...
- TinyFrame升级之四:IOC容器
在这个框架中,我们使用Autofac作为IOC容器,来实现控制反转,依赖注入的目的. 在程序加载的时候,我需要将系统中所有用到的接口与之对应的实现进行装载.由于用户交互部分是在TinyFrame.We ...
- TinyFrame升级之五:全局缓存的设计及实现
在任何框架中,缓存都是不可或缺的一部分,本框架亦然.在这个框架中,我们的缓存分为两部分:内存缓存和单次请求缓存.简单说来,就是一个使用微软提供的MemoryCache做扩展,并提供全局唯一实例:另一个 ...
随机推荐
- Java中用内存映射处理大文件
在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...
- (视频) 《快速创建网站》 2.3 WordPress初始化和功能简介
本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- 《Google想出了一个决定人员晋升的算法,然后就没有然后了......》有感
Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用数据来支撑公司的管理实践.其使命很简单,即基于数据和 ...
- 每日Scrum(9)
今天我们小组进行了软件的测试和界面的美化,特别是在主界面美化方面下了一些功夫,找了很多图片,把格式也处理的很完美,符合界面的一个框架,看起来,美观多了,至此,软件的beta版是基本完成了.
- 【密码】Oracle用户密码系列
[密码]Oracle用户密码系列 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ...
- 为IIS站点添加限制IP
/// <summary> /// 添加站点限制IP /// </summary> /// <param name="sitename">站点名 ...
- C++变量和函数
变量可根据作用域和类型分为 (动态)全局变量,静态全局变量,(动态)局部变量,静态局部变量 全局变量:定义在函数外,在源程序其他cpp文件中访问需要extern修饰 静态局部变量:生命周期相比局部变量 ...
- monkeyrunner之环境搭建及实例(三)
Monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器. 一.Monkeyrunner简介 1.MOnkeyrunner相对Mo ...
- 一个优秀的Unity3d开发者必备的几种设计模式
Unity脚本编程 众所周知,unity的编程属于脚本化,脚本没有一个具体的概念跟架构, 导致在项目过程中,经常出现哪里需要实现什么功能,就随便添加脚本, 结果,就造成了一片混乱,不好管理. 更有甚者 ...
- Android驱动入门-LED--HAL硬件抽象层程序设计①
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-21 16:15:26 设计HAL硬件抽象层程序,则需要 ...