现在有程序A,该程序负责采集和计算数据,然后定时将数据保存到数据库。
程序B,根据需要定时从数据库取程序A保存的数据用来显示。
程序C(web),根据需要定时从数据库取程序A保存的数据用来显示。现在为了提高效率,想改掉通过数据库传递数据的方式,重新设计一下程序的架构,大家有什么好的建议???现在使用数据库方式的缺点:
1、当只有程序A运行时,程序B、C不运行,程序A定时保存数据没有必要,浪费系统和网络资源。
2、当数据库中保存的数据没有变化时,而程序B、C还是定时从数据库读取数据,浪费系统和网络资源。
新的架构应该实现的功能:
1、当程序B、C向程序A取数据时,程序A才将数据发送到B和C。
2、当数据变化时A,才将数据发送到B、C,而不是定时将数据发送到B、C。
3、程序A能根据程序B、C各自需要的数据不同,将不同的数据发送到B和C,而不是将全部数据发到B和C。
4、考虑到扩展性,当以后增加了程序D、E、F时,程序A的接口不需要要变化,也能将数据发送到D、E、F。
希望大家多提宝贵意见,谢谢大家了。
程序B,根据需要定时从数据库取程序A保存的数据用来显示。
程序C(web),根据需要定时从数据库取程序A保存的数据用来显示。现在为了提高效率,想改掉通过数据库传递数据的方式,重新设计一下程序的架构,大家有什么好的建议???现在使用数据库方式的缺点:
1、当只有程序A运行时,程序B、C不运行,程序A定时保存数据没有必要,浪费系统和网络资源。
2、当数据库中保存的数据没有变化时,而程序B、C还是定时从数据库读取数据,浪费系统和网络资源。
新的架构应该实现的功能:
1、当程序B、C向程序A取数据时,程序A才将数据发送到B和C。
2、当数据变化时A,才将数据发送到B、C,而不是定时将数据发送到B、C。
3、程序A能根据程序B、C各自需要的数据不同,将不同的数据发送到B和C,而不是将全部数据发到B和C。
4、考虑到扩展性,当以后增加了程序D、E、F时,程序A的接口不需要要变化,也能将数据发送到D、E、F。
希望大家多提宝贵意见,谢谢大家了。
解决方案 »
- 真心求指教,抽象类和接口到底有什么用呢?
- 如果取得当前系统所在硬盘的序列号
- 参数传递
- 我的电脑explorer进程占用的内存自己变得越来越大
- 怎样把文件夹中的文件名提取出来?
- 请教命名空间中的UI做何解
- C#中如何抛出一个信息?
- 如何动态创建对象类型short/int
- 准备写开题报告了,兄弟姐妹们给点建议
- 在setTimeout("myfuction(参数),1000)中,参数如何传递啊:是setTimeout("myfuction(mnu)",1000),还是:setTimeout("myfuction("+mnu+")"
- 想在电脑上装vs 2003 和 vs 2005,现在2003装上去了,2005却出错,请大家帮忙看看
- acces中的insert无效
对你的需求不是很清楚,不好有定论。
使用MS SQL 2005的扩展存储过程和触发器来监控数据表数据的变化情况并发消息到MSMQ
其它程序通过Receive消息队列而获取变化了的数据情况。
{
void SendInformation(object data);
}public interface IGetData
{
object GetInformation();
}A:IGetData要发送的对象B,C:IGetDataB,C获取数据调用IGetData接口注册多个对象
Hashtable[key(对象.GetType().FullName()]=对象;批量发送
将注册的对象调用ISendData其它方法(减少网络传送,不影响B,C等要发送数据到程序的方法)
将ISendData去掉
public interface IDataProcessor
{
object GetInformation(object sender); //将对象A当参数调用,整理好此对象要发送的数据返回
void SendInformation(object data); //将整理好的数据调用发送方法(网络传送或其它处理)
}您可以B,C其它扩展对象实现IDataProcessor对象,也可以做对应的对象来完成,但注册时两者名称相同而且唯一。
如
B对应写一个类BDataProcessor:IDataProcessor
在SendInformation(object data)方法中将数据发送给B程序,但注册时B对象有Name与BDataProcessor.Name属性相同值。
扩展可以通过配置文件的方法将BDataProcessor,CDataProcessor..等等类注册到主程序中。