在上一篇,我们打造了自己的数据访问部分,这篇,我们准备讲解如何打造逻辑访问部分。

在上一篇中,我们利用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升级之三:逻辑访问部分的更多相关文章

  1. [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考

    原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...

  2. Android OTA 升级之三:生成recovery.img

    Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...

  3. centos7内核升级及curl访问https证书过期处理

    centos7内核升级及curl访问https证书过期处理 先看下当前系统的linux内核版本 uname -r 3.10.0-229.el7.x86_64 升级步骤 1.rpm --import h ...

  4. TinyFrame升级之二:数据底层访问部分

    在上一篇中,我列举了框架的整体结构,下面我们将一一说明: 首先需要说明的是TinyFrame.Data. 它主要用于处理数据库底层操作.包含EF CodeFirst,Repository,Unitof ...

  5. TinyFrame升级之八:实现简易插件化开发

    本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...

  6. 【经验随笔】MYSQL表加锁升级导致数据库访问失败

    背景:有一次定位问题发现,在同一个session连接中对MYSQL部分表加锁,导致其它未加锁的表不能访问. 用Spring管理MYSQL数据连接,在多线程访问数据库的情况下容易出问题.一个线程中对部分 ...

  7. TinyFrame升级之一:框架概览

    由于之前的TinyFrame多于简单,并且只是说明原理,并无成型的框架出来,所以这次我把之前的知识进行了汇总,然后做出了这一版的TinyFrame框架. 整个框架的结构如下: TinyFrame.Da ...

  8. TinyFrame升级之四:IOC容器

    在这个框架中,我们使用Autofac作为IOC容器,来实现控制反转,依赖注入的目的. 在程序加载的时候,我需要将系统中所有用到的接口与之对应的实现进行装载.由于用户交互部分是在TinyFrame.We ...

  9. TinyFrame升级之五:全局缓存的设计及实现

    在任何框架中,缓存都是不可或缺的一部分,本框架亦然.在这个框架中,我们的缓存分为两部分:内存缓存和单次请求缓存.简单说来,就是一个使用微软提供的MemoryCache做扩展,并提供全局唯一实例:另一个 ...

随机推荐

  1. 【转】JAVA 8 日期/时间(Date Time)API指南

    前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...

  2. Java Maps的9个常见问题

    一般来说,Map是一种由键值对组成的数据结构,其中键(key)在Map中是不能重复的: 本篇文章总结了9个最常见的问题(关于Java Map及其实现类): 出于简单考虑,在代码例子中我将不使用泛型,因 ...

  3. CMPP错误码说明

    与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDEL ...

  4. Mysql hql字符串字段中是否包含某个字符串,用 find_in_set

    有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被','分开,现在要取出具有某权限的所有成员列表. 创建表: 1 CREATE TABLE us ...

  5. HBase应用开发回顾与总结系列之一:概述HBase设计规范

      概述 笔者本人接触研究HBase也有半年之久了,虽说不上深入和系统,但至少算是比较沉迷.作为部门里大数据技术的探路者,笔者还要承担起技术传播的职责,所以在摸索研究的过程中总是不断地进行总结和测试, ...

  6. Android,LIstView中的OnItemClick点击无效的解决办法

    在List_Item布局文件中的根节点加上如下背景标黄的这一行 <?xml version="1.0" encoding="utf-8"?> < ...

  7. JS MD5

    1 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as ...

  8. service postgresql initdb [FAILED]

    一.场景 安装postgresql时可能因为配置有问题[后来定位问题是我把pg_hba.conf中local一栏的ident修改为peer就会出错]导致服务起不来,报错如下: [root@localh ...

  9. [转]Java 常用排序算法/程序员必须掌握的 8大排序算法

    本文转自:http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插 ...

  10. UESTC 1015 Lweb and pepper --前,后缀最值

    题意: n种食物,每种含花椒的概率为Pi,现在已经选择了[L,R]这个区间(下标)的食物,要再选一个,使总的食物只有一种含花椒的概率最大,问选哪个最好,相同的选下标小的. 解法: 就不写解法了.此处有 ...