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做扩展,并提供全局唯一实例:另一个 ...
随机推荐
- HashMap常用方法
当需要对元素进行计数时,HashMap非常有用,如下例子,统计一个字符串中每个字符出现的次数: package simplejava; import java.util.HashMap; import ...
- Biee 11g权限详解
前言:BIEE11g的权限较之前10g版本有了较大的变化,最明显的地方就是构架上的变化,其与 Oracle Fusion Middleware Security 紧密的集成在了一起. 在开始之前先让我 ...
- Mongodb Manual阅读笔记:CH6 聚合
6 聚合 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...
- 2、HDFS和Yarn的基础学习笔记
日志 --排错 .log:通过log4j记录的,记录大部分应用程序的日志信息 .out:记录标准输出和标准错误日志,少量记录 hdfs 常用shell -ls -put < ...
- Mycat实现读写分离,主备热切换
实验环境:ubutu server 14 Master IP:172.16.34.212 Slave IP:172.16.34.34.156 Mycat server IP:172.16.34.219 ...
- (安装linux操作系统)
安装linux centos系统. 准备一张centos的镜像可以去官网下载. 准备VMware Workstation官网下载. 作为初学者一般都用虚拟机安装(VMwareWorkstation), ...
- Linux vim编辑命令
yum install -y vim-enhanced 安装vim 命令 一般模式 shift 4 行尾 shift 6 或 0行首 gg 顶部 G 下部 复制 yy 剪切几行 数字 dd p粘贴 ...
- ResultSet rs = stmt.executeQuery(sql); 返回值问题判断
JAVA ResultSet rs = stmt.executeQuery(sql); //查询返回的结果集不管是否查到,rs都不是null,那么问题是怎么判断查找不到来执行一个提示“账号或者 ...
- cookie实现自动登录
有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机).实现这个功能关键就是服务端要识别客户的身份.而用Cookie ...
- Windows Azure Backup Agent安装注意事项
在Windows Server 2008 R2 SP1上安装Windows Azure Backup Agent时会出现错误: “Unable to execute the embedded appl ...