快速开发框架第二弹:让ORM为快速开发插上翅膀(2)改进和基础框架搭建

  在上一篇的文章中,那样的封装让开发变的很爽,好吧,我承认这是面向数据库编程的思维。在一个类中,封装了单表的几乎所有操作,我的看法是,因为ORM封装了所有的与数据库打交道的操作,它就是项目中的数据交换层,由于这个泛型类封装了单对象的操作,那么使得我们独立了所有对象的基本操作,使复用达到最高,使我们关注点集中了在对象关系处理和复杂的业务逻辑中。(希望有经验的人能给我指导或者相互讨论)

一.让封装回归正途 多数据库的支持

1.由于MySoft可以动态传入DbSession对象来支持不通的数据库操作,这里给先前的BaseDao类添加了一个带DbSession的构造函数,2.所有方法改成虚方法,使继承类可以重写自己的实现.在数据的业务逻辑操作类中,修改如下:

1
2
3
4
5
6
7
8
9
10
11
namespace Ecom.BusinessLogic.EshopManageMent
{
    
    public partial class e_ShopService : BaseDao<e_Shop>
    {
        #region "ctor"
        //这里有多个数据库的操作情况,传入相应的数据库操作对象
        public e_ShopService() : base(DataAcess.DefaultSession) { }
        #endregion
    }
}

DaAcess 类如下:因为我这个项目有对多个数据库的操作,所以配置如下

二.项目规划

  

以Eshop模块为例,e_shop文件是mysoft生成的实体类,e_ShopService是生成的一般关系处理业务逻辑类(关系查询),e_ShopPartial是自己写的业务特殊业务处理类,2个类都是部分类,这样的分开是为了在让自己写的东西和生成的东西隔离,修改表结构或生成设置的时候不影响到现有代码。这里的命名规则如下,在eshop模块以下,全部的命名空间为

Ecom.BusinessLogic.EshopManageMent,使得我们处理的逻辑关注于模块的处理。

为什么要把CommonLibraries独立出一个文件夹,个人原因呢,因为东西是我写的,我希望调试的某些时候直接跟入源码,对源码BUG进行修改或者增加功能,如果是队友开发,将会把这些类库编译好的DLL全部放入Dependencies,Dependencies文件夹是为了让大家对项目依赖的DLL一目了然。

三.使用IOC,SingletonProvider来管理我们的业务逻辑

  1.为什么引入IOC: 在项目中,随处出现 logic a = new logic(); 这样的调用,每次调用一次业务,就要new一个实例出来,或者干脆在每个调用的类中写一个类全局变量,让全局调用,虽然这样的写法没问题,但是我觉得对于这种不需要保存状态的类,应该集体的进行管理,也不需要每次通过new得到实例,我的做法如下:

  IOC类的来源是:CommonLibrary.NET 中IOC模块

  2.为什么引入SingletonProvider,对于所有仅限于单线程操作的类,不需要去在每个类中去写相同的得到单列代码

public class PageServiceBase : Page
    {
        #region "通过容器获取类型实例"
        public e_ShopService MyEshopService
        {
            get
            {
                return Ioc.GetObject<e_ShopService>("e_ShopService");
            }
        }
 
        public e_IspService MyIspService
        {
            get
            {
                return Ioc.GetObject<e_IspService>("e_IspService");
            }
        }
        #endregion
 
        #region SingerInstance 如果类是单列模式 那么使用通用的 SingletonProvider获取实例
        //public e_ShopService MyInstanceShopService {
        //    get {
        //        return SingletonProvider<e_IspService>.Instance;
        //    }
        //}
        #endregion
 
    }

好吧,现在我所有继承这个page类的页面,要调用业务逻辑类只需要写 this.MyIspService.XXX();就OK了,清爽,方便,集中管理....

别忘记了,在Global文件中注册业务类.

1
2
3
4
5
6
protected void Application_Start(object sender, EventArgs e)
     {
         Ioc.Init(new IocContainerInMemory());
         Ioc.AddObject("e_ShopService",new e_ShopService());
         Ioc.AddObject("e_IspService", new e_IspService());
     }
posted @   活雷锋  阅读(2361)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示