MyFramework框架搭建(二)DAL层整体通信
首先在这里我要感谢张哥(亲,如果你能看到),没有他和他的框架就没有我今天的思路。
书接上回—整体实现思路
一、编码规范
Pascal和Camel(具体如何实现,兄弟我就不详细介绍了)
二、通信方式
WCF
选择WCF主要是因为它集成了目前.net通信的所有优点方便以后扩展,以后想通过它试试TCP通信,服务器端操控客户端的一些功能
方式:采用服务代理类(可以灵活的配置服务器端地址)
方法:
1、找到如下地址“C:\Windows\System32\cmd.exe”右键以管理员身份运行;
2、输入命令:"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe" /out:C:\WCFClinet \ChanelFactory.cs /config:C:\WCFClint\app.config http://localhost:81/WCFServiceTest/CNPatentSearchService.svc
注意事项:
1、把代理类拷贝到相应的类库里
2、把app.config里的内容拷贝到启动项的config里
3、设置最大传输数据参数 maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
三、数据传输
以二进制数据形式传入,传出
方式:序列化-压缩-解压缩-反序列化
方法:
1、定义序列化和反序列化类
Serializer.cs(每一个类必须单独测试,我采用在测试启动项里,分别为每个类创建一个测试方法形式)
2、定义压缩和解压缩类
Compressor.cs
3、定义传输上帝类
TransGod.cs(主要负责DLL层传入的实体类序列化,结果反序列化,作为前台通信的中间处理)
4、定义服务处理类
ServiceDeal.cs(判断传过来的是哪种执行方法,分别执行,传回结果和异常信息)
注意事项:
1、压缩方法
C#目前我知道有两种压缩方法,最初我用deflateStream,但当字节数小于256时返回值为0,并且解压不方便
后来采用GZipStream,你可以问我感觉怎么样,非常舒服啊^_^
详细设计步骤(目前7层,比上回多出GlobalControler,WcfService)
本次只描述(多出/修改)的类或文件
一、CommonFiles(该类库还可以存放js、css文件等,方便文件管理)
1、XmlFolder(用于存放整个解决方案的Xml文档)
1)GlobalXML.xml(用于存储全局XML配置文件)
把该文件标记为嵌入式文件通过反射得到,对于xml文件我个人认为指明路径取不科学(我测试过)
二、DAL(本文章重点)
1、DataTransFolder(所有的数据传输操作都在这个文件夹里完成)
1)Compressor.cs(压缩类)
采用GZipStream,在解压的时候有一个优点可以CopyTo(stream),比deflateStream方便很多
2)NetCommunicationServiceClient.cs(WCF代理类)
目前还没有优化它的传入地址功能(写文章前忘了Sorry)
3) Serializer.cs(序列化类)
可以把压缩和解压缩分别集中到序列化和反序列化里
4)ServiceDeal.cs(服务处理类)
把数据源预加载到内存(这块需要注意的是,我想做一个通用的数据总线,无论Oracle,SQL都支持,判断
传过来的参数的dataSource选择具体数据源,由于一般项目默认就一个我在实体类dataSource里加了一个判断,如果
为空,给定默认数据源。
5)TransGod.cs(传输上帝类)
客户端在调用时只需调用一个GetResult方法,传入实体类用起来非常舒服,返回一个Dynamic类型数据,客户端自己转换。
2、DealXMLFolder(处理XML的文件夹)
1)XMLHelp.cs
传入类库DLL,文件位置,实体类,通过反射得到传入实体类的集合
采用Linq to Xml技术,比XmlDocument方便很多,建议大家试试
三、GlobalControler(全局控制类库)
目前还没有实现类,准备把自定义控件、全局的事件工厂放在这个类库里
四、Model(模型类库)
1)EnumFolder(存放枚举类的文件夹)
ExecuteType.cs 执行方法枚举类
2)ModelFolder(实体类)
1)InvokeTransformPackage.cs(数据网络传输包类)
2)PingTransformPackage.cs(网络通信包)
3)ReturnTransformPackage.cs(返回值包)
五、WcfService(定义WCF服务)
传入传出就一个方法
public byte[] WebInvoke(byte[] data)
{
return ServiceDeal.Instance.Invoke(data);
}
遗留问题:
1、反射影响性能,不知各位是否有成熟的解决方案
2、XML嵌入到类库里,除了指定路径,和反射是否有其他好的办法
3、B/S结构的VIEW层没有找到好的框架,哪位仁兄可以指点一、二
有缘看到这篇文章的博友,如果发现我哪里有问题或者对哪里感兴趣,希望各种能指出,小弟万分感激。
如果感兴趣的博友可与我联系QQ449208380
MyFramework框架搭建(二)DAL层整体通信的更多相关文章
- MyFramework框架搭建(一)DAL层
一直以来有一个想法,搭建一个属于自己的框架,将自己学到的东西整合到框架里,不断的完善,让它随着我的成长而成长,下面介绍我第一阶段的总结:DAL层搭建 一.基础配置 1.我用的是Ibatis.net框架 ...
- .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger
.Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...
- Unity 游戏框架搭建 (二十三) 重构小工具 Platform
在日常开发中,我们经常遇到或者写出这样的代码 var sTrAngeNamingVariable = "a variable"; #if UNITY_IOS || UNITY_AN ...
- Unity 游戏框架搭建 (二) 单例的模板
上一篇文章中说到的manager of managers,其中每个manager都是单例的实现,当然也可以使用静态类实现,但是相比于静态类的实现,单例的实现更为通用,可以适用大多数情况. 如何设计 ...
- Unity 游戏框架搭建 (二十) 更安全的对象池
上篇文章介绍了,只需通过实现IObjectFactory接口和继承Pool类,就可以很方便地实现一个SimpleObjectPool.SimpleObjectPool可以满足大部分的对象池的需求.而笔 ...
- springmvc跨域+token验证(app后台框架搭建二)
这是app后台框架搭建的第二课,主要针对app应用是跨域的运用,讲解怎么配置跨域服务:其次讲解怎么进行token验证,通过拦截器设置token验证和把token设置到http报文中.主要有如下: ...
- Unity 游戏框架搭建 (二十二) 简易引用计数器
引用计数是一个很好用的技术概念,不要被这个名字吓到了.首先来讲讲引用计数是干嘛的. 引用计数使用场景 有一间黑色的屋子,里边有一盏灯.当第一个人进屋的时候灯会打开,之后的人进来则不用再次打开了,因为已 ...
- Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节
上篇文章使用SafeObjectPool实现了一个简单的Msg类.代码如下: class Msg : IPoolAble,IPoolType { #region IPoolAble 实现 public ...
- openjpa框架入门_项目框架搭建(二)
Openjpa2.2+Mysql+Maven+Servlet+JSP 首先说明几点,让大家更清楚整体结构: 官方source code 下载:http://openjpa.apache.org/dow ...
随机推荐
- Android Studio 模拟器启动问题——黑屏 死机 解决方法
今天用了下Android Studio,出现了一些问题,现在将启动过程中遇到的问题和解决方案列出来,方便大家参考. 安装过程不多说,网上一搜一大把. 那直接说问题吧: 1. 无法启动,报错:Faile ...
- Java正则表达式--网页爬虫
网页爬虫:其实就一个程序用于在互联网中获取符合指定规则的数据 爬取邮箱地址,爬取的源不同,本地爬取或者是网络爬取 (1)爬取本地数据: public static List<String> ...
- mlock家族:锁定物理内存
Start Page Index History Last Change mlock家族:锁定物理内存 系统调用 mlock 家族允许程序在物理内存上锁住它的部分或全部地址空间.这将阻止Linux 将 ...
- spring框架中一个跟String的trim方法一样的方法
@Test public void testTrimWhitespace() throws Exception { assertEquals(null, StringUtils.trimWhitesp ...
- UVa 二分图匹配 Examples
这些都是刘汝佳的算法训练指南上的例题,基本包括了常见的几种二分图匹配的算法. 二分图是这样一个图,顶点分成两个不相交的集合X , Y中,其中同一个集合中没有边,所有的边关联在两个集合中. 给定一个二分 ...
- [置顶] 【cocos2d-x入门之五】导演类CCDirector
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12646337 既然cocos2d-x都帮我们封装好了,使得开发与平台无关,那 ...
- 初学XPath,其实很简单
XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. (我的理解:XPath 就是一个用来查找xml节点的路径语言,一个路径字符串语法) XM ...
- android应用的界面编程----View与ViewGroup的概念
1 UI OverView Android中所有的UI元素都是通过View与ViewGroup来构建的,View是指屏幕中一块可与用户进行交互的空白,类似于java界面编程中的JPanel.为了界面布 ...
- 第1组UI组件:布局管理器
1 布局管理的来源 为了让UI在不同的手机屏幕上都能运行良好----不同手机屏幕的分辨率/尺寸并不完全相同,如果让程序手动控制每个组件的大小.位置,会给编程带来巨大的麻烦.为了解决这个问题.andro ...
- Unity3D4.x之AssetBundle学习笔记
关于AssetBundle AssetBundle可用来将多个资源打包为一个文件,实现动态下载和更新.需要注意的是Unity3D5.x以后对打包方式进行了升级,不用再在依赖关系上伤透脑筋,但是和4.x ...