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

在上一篇中,我们利用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. 布局 position

    position : 设置定位方式 跟『定位』相关的有一些属性,最重要的一个是『position』,它主要是设置『定位方式』. 而定位方式最重要的是设置『参照物』. 配合 position 使用的有这 ...

  2. (视频)《快速创建网站》 4.1 为啥造软件不同于造汽车,为啥是软件就一定会有Bug - 构建开发运维一体化(DevOps)

    本文是<快速创建网站>系列的第9篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...

  3. CSS3 background-size属性

    请复制粘贴,图片请自带 <!DOCTYPE html > <html > <head> <meta charset="utf-8"> ...

  4. pentaho cde popup弹出框口

    弹出窗口在pentaho cde里面相对比较容易,不过还是记录一下,以防时间久了,忘记关键参数. 先看一下效果图: 画出自己想要在弹出框展示的图形,把他的HtmlObject设置成弹出窗口,如图: 然 ...

  5. MongoDB ServerStatus返回信息

    ServerStatus返回信息 ServerStatus返回mongodb中很多信息 http://docs.mongodb.org/manual/reference/command/serverS ...

  6. Sql Server之旅——第八站 复合索引和include索引到底有多大区别?

    周末终于搬进出租房了,装了宽带....才发现没网的日子...那是一个怎样的与世隔绝呀...再也受不了那样的日子了....好了,既然网 安上去了,还得继续我的这个系列. 索引和锁,这两个主题对我们开发工 ...

  7. MySQL创建和操作数据库表demo

    [1]建立员工档案表要求字段:员工员工编号,员工姓名,性别,工资,email,入职时间,部门. [2]合理选择数据类型及字段修饰符,要求有NOT NULL,auto_increment, primar ...

  8. 烂泥:【解决】修改LVM卷组名重启系统后,无法进入进入系统

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 一台服务器系统已经安装完毕,但是LVM的卷组vg使用的是默认的VolGroup名称,使用起来感觉不舒服,打算把这个卷组名称修改为vg. 先来查看系统中有 ...

  9. history

    history用来显示最近执行的命令,系统中将当前的允许的最大保存的历史命令条数保存在环境变量HISTSIZE中,缺省选项时表示显示最多HISTSIZE个命令,可以指定显示最近的n条命令 $histo ...

  10. 工作中常用的Linux命令:find命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6056571.html (转载请注明出处) 1.命令格式 find [-H] [-L] [-P] [-D deb ...