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做扩展,并提供全局唯一实例:另一个 ...
随机推荐
- php示例代码之使用mysqli对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- 今天说一下Order by 这个常规东西~
Order by 在我们日常的数据库开发生活中是出镜率灰常高的. order by 的作用就是用于对查询出来的结果进行排序~对啊~人家就是这么接地气~比如按发生时间啊,首字母啊之类的都是相当常见. 今 ...
- SQL Server调优系列进阶篇(如何索引调优)
前言 上一篇我们分析了数据库中的统计信息的作用,我们已经了解了数据库如何通过统计信息来掌控数据库中各个表的内容分布.不清楚的童鞋可以点击参考. 作为调优系列的文章,数据库的索引肯定是不能少的了,所以本 ...
- CStdioFile CString 读写中文
TCHAR* old_locale = _tcsdup( _tsetlocale(LC_CTYPE,NULL) ); _tsetlocale( LC_CTYPE, _T("chs" ...
- 烂泥:SQL Server 2005数据库安装
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 为了能更好的利用服务器,所以打算把该业务进行迁移.因为该业务比较特殊,需要服务器上有相应的硬件支持,所以打算直接升级该服务器目前的操作系统.目前公司服务 ...
- x01.os.12: 在 windows 中写 OS
在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...
- cookie工具类,解决servlet3.0以前不能添加httpOnly属性的问题
最近在解决XSS注入的问题,由于使用的servlet版本是2.5,不支持httpOnly的属性,故做了个工具类来实现cookie的httpOnly的功能.全类如下: /** * cookie工具类,解 ...
- 关于Leetcode上二叉树的算法总结
二叉树,结构很简单,只是比单链表复杂了那么一丢丢而已.我们先来看看它们结点上的差异: /* 单链表的结构 */ struct SingleList{ int element; struct Singl ...
- python 缩进语法,优缺点
Python的语法比较简单——采用缩进方式 缩进有利有弊: 好处之一是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab.按照约定俗成的管理,应该始终坚持使用4个空格的缩进. 其二是强迫你写出 ...
- [转]在EntityFramework6中执行SQL语句
本文转自:http://www.cnblogs.com/wujingtao/p/5412329.html 在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有 ...