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做扩展,并提供全局唯一实例:另一个 ...
随机推荐
- git各种命令介绍以及碰到的各种坑
一.各种命令介绍: git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地 ...
- centos 安装依赖错误
出现下列错误: error: curl/curl.h: No such file or directory 出错原因:缺少libcurl-dev or libcurl-devel centOS上安装依 ...
- 移动Windows用户文件夹的方法研究
这种方法可能导致升级Windows失败.请谨慎使用. Windows 8.1 使用有效.其他系统请酌情修改. —————————————————————————— 复制文件内容(带权限等信息):有的说 ...
- XSS Payload知识备忘
参考资料:<白帽子讲Web安全>吴翰清 著 参见: 百度百科 http://baike.baidu.com/view/50325.htm 维基百科 http://zh.wikipedia. ...
- 在DigitalOcean云主机上搭建SVN服务器
最近买了个DigitalOcean主机,顺便搭建个PPTP SVN服务器. 下面是搭建方法: https://www.digitalocean.com/community/tutorials/how- ...
- php 批量更新某字段内容的部分内容 replace(要替换的字段,'被替换的字符串,'替换成的字符串')
要求: 一个字段值: ------预约---- 要将其中 "预约",改成"预定". 但是我开始写的时候,写成了 update 表名 set smscontent ...
- ovirt-engine安装
一.安装 1.更新系统 原来是centos4.5 #yum update 升级后到6.7版本. [root@localhost ~]# cat /etc/redhat-release CentOS r ...
- 【2016-10-13】【坚持学习】【Day4】【模板方法模式】
今天学习模板方法模式 例子代码; 模板抽象类,定义了一套流程,有一些方法已经实现,有一些抽象方法需要继承它的子类实现 abstract class DataViewer { //抽象方法:获取数据 p ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- AC日记——删除单词后缀 openjudge 1.7 20
20:删除单词后缀 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个单词,如果该单词以er.ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为0), 否 ...