`

关于设计模式的问题:这样的系统应该如何设计?

    博客分类:
  • .Net
阅读更多

对设计模式不是很熟悉,现在碰到一个比较棘手的问题,不知道应该如何设计,请大家帮忙看一看。

现在有两种用于快速处理订单的业务A、业务B,分别用于处理订单A和订单B,他们的逻辑都是相似的,基本逻辑就是:

(1)初始化业务的各项基础数据
(2)接受一个订单,放入到待处理订单缓冲
(3)从待处理缓冲读取一个订单并开始处理,并将处理完的订单放入到已处理缓冲
(4)定期检测已处理缓存,当已处理缓冲区达到一定数量之后就同步写入数据库

上述逻辑的设计是考虑到订单的数量非常庞大(高峰时段每秒需要接受10~100个订单),并且订单发出后用户无需等待处理状态,所有订单在第二步都是可以成功处理的。每个订单如果即时写入数据库,会造成数据库无法负担。因此业务A和业务B都包含下列线程:
(1)主线程:用于接受客户端请求
(2)初始线程:完成系统初始化
(3)处理线程:处理队列
(4)同步更新线程:更新到数据库

系统采用.Net   Remoting技术进行部署,为了减少并发冲突,我的想法是:主线程使用实例变量形式,而待处理缓冲和已处理缓冲都采用静态变量形式,响应的初始线程、 处理线程和同步更新线程都均采用静态变量形式。因此我打算写一个基础类,业务A和业务B都该基础类进行继承,基类的代码可以简单概况为:

C# code
                        
<!-- 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里面实现,上面的思路是没有问题的(不采用抽象方法),当然很多代码会重复,如果需要增加订单类型,就要增加业务类,维护起来不方便。

如果一定要实现一个基类,那么这么基类应该怎么写呢?

分享到:
评论

相关推荐

    《设计模式:可复用面向对象软件的基础》英文版

    《设计模式:可复用面向对象软件的基础》是一本由Erich Gamma、Richard Helm等四位国际知名的软件工程师共同编写的经典之作,该书提供了面向对象软件设计中常用的模式,并通过具体的案例解释了这些模式如何帮助解决...

    人人都懂设计模式 人人都懂设计模式

    设计模式是软件开发中的一种解决方案,它提供了一种通用的设计思想和方法论,可以帮助开发者更好地设计和实现软件系统。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 在本书中,作者罗伟富通过 ...

    设计模式:可复用面向对象软件的基础--详细书签版

     另外,这也不是一篇高级专题技术论文,而是一本关于设计模式的书,它描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。设计模式捕获了随时间进化与发展的问题的求解方法,因此它们并不是人们从...

    设计模式:可复用面向对象软件的基础(非扫描版+高清)

    《设计模式:可复用面向对象软件的基础》是一本经典的软件工程著作,它详细阐述了在面向对象编程中,如何通过使用预定义的解决方案模板来解决常见问题,从而提高代码的可读性、可维护性和复用性。设计模式是经验丰富...

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...

    设计模式期末作业(要求5个以上的设计模式的模拟系统)

    这是我的设计模式作业:运用5个以上的设计模式创建一个系统。其中包括:1.单例模式 2.原型模式 3.抽象工厂模式+模板方法模式 4.代理模式 5.策略模式 详见博文:...

    设计模式:基于C#的工程化实现及扩展(完整电子版)

    设计模式是软件工程中的重要概念,它代表了在特定情境下解决问题的可重用方案,能够帮助开发者构建更加灵活、可维护和可扩展的系统。本书全面地介绍了多种经典的设计模式,并结合C#的实际应用,提供了详尽的工程化...

    设计模式课程设计---使用6个不同的设计模式完成绘图系统(java)

    运用到的设计模式有备忘录模式,迭代器模式,简单工厂模式,状态模式,模版方法模式,单例模式。 资源包含项目文件(eclipse)以及系统说明(docx文件),系统说明中说明了为什么要使用该模式,使用该模式有什么好处...

    嵌入式实时系统设计模式研究

    本文在此基础上,结合Bruce Douglas关于实时系统设计模式的研究成果,提出了ERTSDP模式,该模式能够有效提升嵌入式实时系统的开发效率和软件质量。 #### 1. 设计模式概述 设计模式是一种针对常见问题的通用解决...

    软件设计模式与体系结构期末课程大作业-服装管理系统

    首先,**设计模式** 是在特定上下文中解决常见问题的模板,它为软件设计提供了通用解决方案。在“服装管理系统”中,可能运用了以下几种经典设计模式: 1. **单例模式**:确保一个类只有一个实例,并提供一个全局...

    23种设计模式(C++).pdf

    设计模式是面向对象编程领域中,解决特定问题的一般性方案。它们由四人组(Gang of Four,简称GoF)在1994年的《设计模式:可复用面向对象软件的基础》一书中提出。设计模式分为创建型、结构型和行为型三类,总共...

    设计模式大作业-蛋糕预定系统实验报告.pdf

    1. 设计模式在蛋糕预定系统中的应用。 2. Java编程语言的使用。 3. MyEclipse开发环境的使用。 4. MySQL数据库的应用。 5. JDK版本的应用。 6. 软件开发流程(如从需求分析、系统设计到编码实现)。 7. 接口与实现类...

    尚硅谷设计模式源码笔记课件.zip

    本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,...

    软件体系结构实验报告--设计模式2

    在软件开发领域,设计模式是经验丰富的开发者们总结出的解决常见问题的可复用解决方案。本实验报告主要探讨了五个关键的设计模式:组合模式、外观模式、代理模式、观察者模式以及策略模式,这些都是软件体系结构中的...

    时间触发嵌入式系统设计模式--配套光盘

    时间触发的设计模式在这样的平台上实施,能够使系统在处理实时任务时具有更好的性能和可靠性。这涉及到对硬件中断、定时器管理和任务调度的精细控制,以确保每个任务都能在预定义的时间点准确执行。 调度器是时间...

    设计模式大作业动物运动会系统【多种设计模式+文档】.zip

    系统设计过程、设计模式介绍、UML类图以及系统实现效果详见如下项目说明: https://blog.csdn.net/vx1271487114/article/details/125496754?spm=1001.2014.3001.5502 项目简介:《动物运动会》是一套动物运动会题材...

    软件设计模式(java版)习题答案.pdf

    设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案和效果。 设计模式的优点 正确使用设计模式具有以下优点: 1. ...

    设计模式可复用面向对象软件的基础(c++).pdf

    设计模式是解决特定设计问题的通用模板,它总结了面向对象设计中最宝贵的经验教训,用标准化、可复用的形式呈现出来。设计模式帮助软件开发者避免重复发明轮子,减少设计阶段的不确定性,从而提升软件开发的效率和...

Global site tag (gtag.js) - Google Analytics