07 2013 档案

摘要:这次介绍的这个框架只适用于中小项目,并且各个读写数据库结构是一致的情况,还要并且是写入数据库只有1台情况。我们来看看这个子系统适用的场景:我们来看这个子系统的配置文件: Server=.;Database=d1;User Id=sa;Password=111111; //唯一的主数据库(写入DB) Server=.;Database=d2;User Id=sa;Password=111111; //这些是普通的对等的读数据库,只是做了些普通索引优化 Server=.;Database=d3;User Id=sa;Password=111111; //同... 阅读全文
posted @ 2013-07-31 00:42 McKay 阅读(6031) 评论(14) 推荐(2) 编辑
摘要:大家对这段代码肯定很熟悉吧:public List SearchUsers(string userName) { string cacheKey=string.Format("SearchUsers_{0}", userName); List users = cache.Find(cacheKey) as List; if (users == null) { users = repository.GetUsersByUserName(userName); ... 阅读全文
posted @ 2013-07-30 17:10 McKay 阅读(4320) 评论(9) 推荐(6) 编辑
摘要:放心,这次不是说设计模式中的代理模式,说的是C#的RealProxy的用法,主要用于:通过给class贴标签,让class做更多的工作,比如判断是否存在缓存,有则直接返回缓存object,没有则保存为缓存,等待下次请求是可以更快的获取数据(当然这只是其中一种常用用途,MVC的Action就是采用这种方式)下面是序列图:.Net Object Generation interceptor属于.NET自身行为,不需要额外写代码。Code Consumer指想调用RealObject来进行调用的对象,比如控制台程序,或者WEB程序。ProxyAttribute里定义了具体代理类是哪个,这个代理类是自 阅读全文
posted @ 2013-07-30 11:08 McKay 阅读(4612) 评论(3) 推荐(1) 编辑
摘要:对象池服务可以减少从头创建每个对象的系统开销。在激活对象时,它从池中提取。在停用对象时,它放回池中,等待下一个请求。我们来看下主线程中,如何与对象池打交道:static void Main(string[] args) { InstancePoolResolver.Register(); while (true) { Thread.Sleep(2000); Console.Clear(); for (int i = 0; i ... 阅读全文
posted @ 2013-07-29 19:11 McKay 阅读(3545) 评论(4) 推荐(2) 编辑
摘要:所谓半同步半异步是指,在某个方法调用中,有些代码行是同步执行方式,有些代码行是异步执行方式,下面我们来举个例子,还是以经典的PlaceOrder来说,哈哈。PlaceOrder的主要逻辑:public bool PlaceOrder(OrderInfo order){ //验证Order合法性 //OrderInfo增加到仓储 //生成order的pdf //通知客户,email方式}我们假设做出如下决定:public bool PlaceOrder(OrderInfo order)... 阅读全文
posted @ 2013-07-29 11:27 McKay 阅读(3329) 评论(4) 推荐(4) 编辑
摘要:受到CQRS的影响,写了个EventBus,能实现发布订阅模式执行event,在DDD模型中,可以使用如下代码触发事件:EventBus bus = EventBus.Instance();bus.Publish(new OrderAddedEvent());解决方案结构图如下,很简单易懂:xml事件配置代码sample如下(1个event可以定义多个订阅者,如下): ConsoleApplication2.code.Events.OrderAddedEvent ConsoleApplication2.code.EventHandlers.OrderAddedEve... 阅读全文
posted @ 2013-07-28 23:21 McKay 阅读(2657) 评论(1) 推荐(0) 编辑
摘要:先上一些多线程需要使用的函数定义:DWORD WINAPI ProcessClientRequests(LPVOID lpParam) //新线程将会执行的函数定义{ return 0;}HANDLE handler=CreateThread(NULL, 0, ProcessClientRequests, &clientsocket, 0, NULL); //这里比较简单,&clientsocket是个指针,是从主线程传入新线程的参数WaitForMultipleObjects(MAXCLIENTS, threads, TRUE, INFINITE); //用来阻塞主线程,直. 阅读全文
posted @ 2013-07-28 16:06 McKay 阅读(8861) 评论(6) 推荐(2) 编辑
摘要:前段时间写了个C# Socket初探,这次再写个C语言的Socket博文,运行效果如下:实现步骤:1. Server端#include //用于printf等函数的调用#include //Socket的函数调用 #pragma comment (lib, "ws2_32") //C语言引用其他类库时,除了.h文件外,还要加入对应的lib文件(这个不同于C#)int main(){ WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOC... 阅读全文
posted @ 2013-07-26 17:43 McKay 阅读(18476) 评论(6) 推荐(9) 编辑
摘要:Win32类型的全屏代码:1. 去掉menuATOM MyRegisterClass(HINSTANCE hInstance){ WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hIn... 阅读全文
posted @ 2013-07-24 20:52 McKay 阅读(3147) 评论(0) 推荐(3) 编辑
摘要:最近学习MFC,写了个用键盘上下左右移动的坦克界面,效果图:先用VC++新建一个最简单的MFC项目,基于Dialog的1. 添加坦克图片资源:略2. 添加3个变量:x, y, m_bitmapint x;int y;CBitmap m_bitmap;3. 在初始化方法中加载bitmap以及设置好初始的坐标位置:BOOL Ctest3Dlg::OnInitDialog(){ //略(系统生成的代码略) this->m_bitmap.LoadBitmapW(IDB_BITMAP2); //BMP文件的资源文件ID BITMAP bmpInfo; this->m... 阅读全文
posted @ 2013-07-23 18:30 McKay 阅读(1168) 评论(0) 推荐(0) 编辑
摘要:写了个简易版的ftp(服务器和客户端),运行效果如下图:click download下载中的UI:原理:模仿正规ftp方式,分成2个socket连接:文本命令socket、数据信道socket。牵涉到的知识点:线程通过invoke 委托的方式调用主界面的控件程序结束时的子线程遍历终止多线程之间的阻塞、同步socket传输命令的异步方式操作实现了如下功能:列举服务器主目录中的所有文件下载文件到客户端(支持大文件)实现起来比较容易,代码在这里下载。 阅读全文
posted @ 2013-07-06 16:58 McKay 阅读(3548) 评论(2) 推荐(1) 编辑
摘要:闲着无聊,写了个简单的C/S Socket程序,功能很简单,服务器在9000端口监听socket接入,只要有接入,就发送"Welcome."消息给客户端。代码分2块,server端:class Program { static void Main(string[] args) { TcpListener lsner = new TcpListener(9000); lsner.Start(); Console.WriteLine("started in port: 9000"); ... 阅读全文
posted @ 2013-07-04 01:01 McKay 阅读(6596) 评论(17) 推荐(3) 编辑

点击右上角即可分享
微信分享提示