- 浏览: 127821 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hulibo:
太简单了 没参考价值
网上商城的数据库设计 -
lfc:
[img][/img][url][/url][flash= ...
Petshop 4.0 详细解释 -
早上好朋友:
引用
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
早上好朋友:
[flash=200,200][/flash][url][/u ...
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
银杏树:
参考一下。
网上商城的数据库设计
对设计模式不是很熟悉,现在碰到一个比较棘手的问题,不知道应该如何设计,请大家帮忙看一看。
现在有两种用于快速处理订单的业务A、业务B,分别用于处理订单A和订单B,他们的逻辑都是相似的,基本逻辑就是:
(1)初始化业务的各项基础数据
(2)接受一个订单,放入到待处理订单缓冲
(3)从待处理缓冲读取一个订单并开始处理,并将处理完的订单放入到已处理缓冲
(4)定期检测已处理缓存,当已处理缓冲区达到一定数量之后就同步写入数据库
上述逻辑的设计是考虑到订单的数量非常庞大(高峰时段每秒需要接受10~100个订单),并且订单发出后用户无需等待处理状态,所有订单在第二步都是可以成功处理的。每个订单如果即时写入数据库,会造成数据库无法负担。因此业务A和业务B都包含下列线程:
(1)主线程:用于接受客户端请求
(2)初始线程:完成系统初始化
(3)处理线程:处理队列
(4)同步更新线程:更新到数据库
系统采用.Net Remoting技术进行部署,为了减少并发冲突,我的想法是:主线程使用实例变量形式,而待处理缓冲和已处理缓冲都采用静态变量形式,响应的初始线程、 处理线程和同步更新线程都均采用静态变量形式。因此我打算写一个基础类,业务A和业务B都该基础类进行继承,基类的代码可以简单概况为:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> using System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Collections; using System.Collections.Specialized; using System.Collections.Generic; using System.Threading; using System.Text; namespace MyProgram { public class OrderBaseObj : MarshalByRefObject { // 待处理订单列表 protected static List<OrderItem> lstUnHandle = new List<OrderItem>(); // 已处理订单列表 protected static List<OrderItem> lstHandle = new List<OrderItem>(); // 初始化是否完成标记 protected static bool blnInitFinished = false; // 待执行的数据库事务表 protected static List<string> lstUpdateCommand = new List<string>(); // 初始化线程 protected static Thread threadInit = null; // 处理线程 protected static Thread threadHandle = null; // 数据库同步线程 protected static Thread threadDB = null; static OrderBaseObj() { ThreadStart tst = new ThreadStart(ThreadInit_Start); threadInit = new Thread(tst); threadInit.Priority = ThreadPriority.BelowNormal; threadInit.Start(); tst = new ThreadStart(ThreadHandle_Start); threadHandle = new Thread(tst); threadHandle.Priority = ThreadPriority.Lowest; threadHandle.Start(); tst = new ThreadStart(ThreadDB_Start); threadDB = new Thread(tst); threadDB.Priority = ThreadPriority.Lowest; threadDB.Start(); } /// <summary> /// 添加一个PV到待处理区 /// </summary> public void AddPV(OrderItem order) { lstUnHandle.Add(order); } // 初始线程启动方法 private static void ThreadInit_Start() { Init(); blnInitFinished = true; } // 初始化抽象方法 protected static abstract bool Init(); // 处理线程启动方法 private static void ThreadHandle_Start() { while (true) { OrderItem order=lstUnHandle[0]; lstUnHandle.RemoveAt(0); HandleOrder(order); lstHandle.Add(order); if(lstHandle.Count>100) { string strCommmand=HandleUpdateCommmand(); lstUpdateTrans.Add(strCommand); lstHandle.Clear(); } } } // 订单处理的抽象方法,每个子类必须实现该方法 protected abstract static void HandleOrder(OrderItem order); // 返回处理数据库同步更新命令 protected abstract static string HandleUpdateCommmand(); // 同步线程启动方法 private static void ThreadDB_Start() { while (true) { if (lstUpdateTrans.Count > 0) { string strCommand=lstUpdateTrans[0]; lstUpdateTrans.RemoveAt(0); DBObj db=new DBObj(); db.Execute(strCommand); db.CloseConn(); } Thread.Sleep(new TimeSpan(0, 0, 2)); } } } }
上面代码的问题就是:静态方法不能描述为抽象方法,如果不采用基类的方式,直接在业务A或者业务B里面实现,上面的思路是没有问题的(不采用抽象方法),当然很多代码会重复,如果需要增加订单类型,就要增加业务类,维护起来不方便。
如果一定要实现一个基类,那么这么基类应该怎么写呢?
发表评论
-
webservice的几种调用方法
2009-10-10 17:35 1252一、WebService在cs后台程序中的调用 ... -
我是如何学习设计模式的十:工厂模式-这个是我花的心思最多的
2009-10-09 10:39 1076工厂模式 为什么会出 ... -
Asp.net ViewState
2009-08-27 14:20 1357ASP.NET中的ViewState ViewSta ... -
Stack,Queue,SortedList
2009-08-04 15:23 901using System; using System.Dat ... -
匿名方法
2009-08-04 09:21 840匿名方法优点:减少系统开销,在真正委托调用时才定义。 usi ... -
.NET WebService的创建、部署、运用
2009-07-24 13:41 1430项目要求:(简单点讲) ... -
C#生成缩略图
2009-07-13 10:01 1661using System; using System.Dat ... -
.net MD5
2009-06-17 10:19 898using System; using System.Dat ... -
给RadionButtonList控件加onclick属性
2009-05-13 16:25 1069RadionButtonList _Specialclassi ... -
设计模式学习笔记七:常用设计模式原则总结
2009-05-12 15:43 1022前面学习了一部分创建 ... -
设计模式学习笔记六——Adapter模式
2009-05-12 15:42 721动机:将一个类的接口转换成客户希望的另外一个接口,使得原本由于 ... -
设计模式学习笔记六:.NET反射工厂
2009-05-12 15:02 40171. 简述 通过前面的学习,我们以传统的方式实现了 ... -
设计模式学习笔记五——Prototype模式
2009-05-12 15:01 1051动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创 ... -
设计模式学习笔记五:抽象工厂(Abstract Factory)
2009-05-12 14:58 14351.概述 意图: 提供一个创建一系列相关 ... -
设计模式学习笔记四——Builder模式
2009-05-12 14:52 1119动机:一个复杂对象由多个子对象构成,该对象创建的算法相对不变, ... -
设计模式学习笔记四:工厂方法(Factory Method)
2009-05-12 14:51 8801.概述 在软件系统中,经常面临着“某个对象”的创建工作 ... -
设计模式学习笔记三——Abstract Factory模式
2009-05-12 14:51 978动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离 ... -
设计模式学习笔记三:简单工厂(Simple Factory)
2009-05-12 14:50 887开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面 ... -
设计模式学习笔记二——Singleton模式
2009-05-12 14:49 847意图:出于某种目的(如性能考虑、逻辑性要求)要求一个类的实例只 ... -
设计模式学习笔记二:面向对象基础六之委托与事件
2009-05-12 14:48 1193委托 委托作为函 ...
相关推荐
另外,这也不是一篇高级专题技术论文,而是一本关于设计模式的书,它描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。设计模式捕获了随时间进化与发展的问题的求解方法,因此它们并不是人们从...
本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...
这是我的设计模式作业:运用5个以上的设计模式创建一个系统。其中包括:1.单例模式 2.原型模式 3.抽象工厂模式+模板方法模式 4.代理模式 5.策略模式 详见博文:...
为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也有几个朋友给我点鼓励,给了star。本文工程...
每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。我们的目标是将设计经验以人们能够有效利用的形式记录下来。鉴于此目的,我们编写了一些重要的设计模式,并以编目分类的形式将...
运用到的设计模式有备忘录模式,迭代器模式,简单工厂模式,状态模式,模版方法模式,单例模式。 资源包含项目文件(eclipse)以及系统说明(docx文件),系统说明中说明了为什么要使用该模式,使用该模式有什么好处...
时间触发嵌入式系统设计模式有点模糊 还好
设计模式之于面向对象系统的设计和开发的作用就有如数据结构之于面向过程开发的作用一般,其重要性和必要性自然不需要我赘述。然而学习设计模式的过程却是痛苦的,从阅读设计模式的圣经——GoF的《设计模式:可复用...
学习设计模式之装饰模式案例:电子销售系统
系统设计过程、设计模式介绍、UML类图以及系统实现效果详见如下项目说明: https://blog.csdn.net/vx1271487114/article/details/125496754?spm=1001.2014.3001.5502 项目简介:《动物运动会》是一套动物运动会题材...
基于DAO设计模式的新闻发布系统基于DAO设计模式的新闻发布系统基于DAO设计模式的新闻发布系统基于DAO设计模式的新闻发布系统基于DAO设计模式的新闻发布系统
Tomcat 系统架构与设计模式,第 1 部分: 工作原理1
毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化。创建型模式 : 通常和对象的创建有关,涉及到对象实例化的方式(共5种模式) ;结构型模式: 描述的是如何组合类和对象以获得更大的...
为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也有几个朋友给我点鼓励,给了star。本文工程...
Tomcat 系统架构与设计模式,第 1 部分 工作原理
资源名称:MongoDB应用设计模式内容简介:无论是在构建社交媒体网站,还是在开发一个仅在内部使用的企业应用程序,《MongoDB应用设计模式》展示了MongoDB需要解决的商业问题之间的连接。你将学到如何把MongoDB设计...
系统架构+ORM+设计模式 系统架构+ORM+设计模式
本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,...
JAVA设计模式,定义:提供创建对象的接口. 为何使用? 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
设计模式如何帮助解决问题 选择适当的设计模式 使用设计模式 因素改变 反模式 J2EE与设计模式 J2EE模式的问题域 小结 第2章 Web层设计模式 表示模式 案例:宾馆订房管理系统 标识模式 小结 第3章 持久性框架设计...