手把手教你写ORM(五)
CMMI是魔鬼
继续上面的内容,这里我们要实现一个插件的结构来动态从外部载入数据组件,其好处不用我再多说了,可能有人会发问,插件是AOP的拿手好戏你咋个不用?真是晕死,就2行代码,犯得着引入那么大一堆东西进来么?
插件,首先要定义接口,当然通过Refrection我们无所不能,但是有一个定义好的Interface对性能的改善来说不是一点半点的。
我们引入一个新的项目来定义接口,理由呢就是消除循环引用。
接口的定义:
这里你也可以按照自己的想法来定义,比如需要更细粒度的操作方法等等,反正我是觉得这几个够用了,连事务都有了,夫复何求阿......
后头的事情就很简单了
我们在主项目里添加一个Factory的类用来获取插件的实例:
有这么简单么?事情就是这么简单,关键就这两行
Assembly ass = Assembly.LoadFrom(path);
IQueriable query = (IQueriable)ass.CreateInstance(sp.Provider);
好了,现在你可以通过修改前一篇提到的数据库配置文件来更换使用的数据库操作组件了。
下一篇我们来看如何对类来做映射。
to be continue.....
继续上面的内容,这里我们要实现一个插件的结构来动态从外部载入数据组件,其好处不用我再多说了,可能有人会发问,插件是AOP的拿手好戏你咋个不用?真是晕死,就2行代码,犯得着引入那么大一堆东西进来么?
插件,首先要定义接口,当然通过Refrection我们无所不能,但是有一个定义好的Interface对性能的改善来说不是一点半点的。
我们引入一个新的项目来定义接口,理由呢就是消除循环引用。
接口的定义:
1
namespace Alexander.Xbase.Interface
2
{
3
public interface IQueriable
4
{
5
void Init(string connstr,string configbase);
6
void OpenTranscation();
7
void Commit();
8
void RollBack();
9
object Query4Object(string action,object target);
10
void Query4List(string action,ref IList target,object queryparam);
11
int Query4Page(string action,ref IList target, object queryparam, int pageid, int pagesize, string sort, string direct);
12
int Query4Update(string action, object target);
13
object Query4Count(string action, object target);
14
void Close();
15
}
16
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

这里你也可以按照自己的想法来定义,比如需要更细粒度的操作方法等等,反正我是觉得这几个够用了,连事务都有了,夫复何求阿......
后头的事情就很简单了
我们在主项目里添加一个Factory的类用来获取插件的实例:
1
namespace Alexander.Xbase
2
{
3
public class QueryLoader
4
{
5
public static IQueriable LoadQuerySession(string SessionName)
6
{
7
Sessions Session = new Sessions();
8
SessionParameter sp = Session.GetSessionByName(SessionName);
9
string path = sp.Assambly + ".dll";
10
Assembly ass = Assembly.LoadFrom(path);
11
IQueriable query = (IQueriable)ass.CreateInstance(sp.Provider);// (sp.Provider);
12
query.Init(sp.Connectionstring,sp.Configbase);
13
return query;
14
}
15
}
16
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

有这么简单么?事情就是这么简单,关键就这两行
Assembly ass = Assembly.LoadFrom(path);
IQueriable query = (IQueriable)ass.CreateInstance(sp.Provider);
好了,现在你可以通过修改前一篇提到的数据库配置文件来更换使用的数据库操作组件了。
下一篇我们来看如何对类来做映射。
to be continue.....
分类:
手把手系列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述