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

在上一篇中,我们利用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. HashMap常用方法

    当需要对元素进行计数时,HashMap非常有用,如下例子,统计一个字符串中每个字符出现的次数: package simplejava; import java.util.HashMap; import ...

  2. Biee 11g权限详解

    前言:BIEE11g的权限较之前10g版本有了较大的变化,最明显的地方就是构架上的变化,其与 Oracle Fusion Middleware Security 紧密的集成在了一起. 在开始之前先让我 ...

  3. Mongodb Manual阅读笔记:CH6 聚合

    6 聚合 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  4. 2、HDFS和Yarn的基础学习笔记

    日志 --排错 .log:通过log4j记录的,记录大部分应用程序的日志信息 .out:记录标准输出和标准错误日志,少量记录     hdfs 常用shell     -ls     -put < ...

  5. Mycat实现读写分离,主备热切换

    实验环境:ubutu server 14 Master IP:172.16.34.212 Slave IP:172.16.34.34.156 Mycat server IP:172.16.34.219 ...

  6. (安装linux操作系统)

    安装linux centos系统. 准备一张centos的镜像可以去官网下载. 准备VMware Workstation官网下载. 作为初学者一般都用虚拟机安装(VMwareWorkstation), ...

  7. Linux vim编辑命令

    yum install -y vim-enhanced 安装vim 命令 一般模式 shift 4 行尾 shift 6 或 0行首 gg 顶部 G 下部 复制 yy 剪切几行  数字 dd p粘贴 ...

  8. ResultSet rs = stmt.executeQuery(sql); 返回值问题判断

      JAVA  ResultSet rs = stmt.executeQuery(sql);  //查询返回的结果集不管是否查到,rs都不是null,那么问题是怎么判断查找不到来执行一个提示“账号或者 ...

  9. cookie实现自动登录

    有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机).实现这个功能关键就是服务端要识别客户的身份.而用Cookie ...

  10. Windows Azure Backup Agent安装注意事项

    在Windows Server 2008 R2 SP1上安装Windows Azure Backup Agent时会出现错误: “Unable to execute the embedded appl ...