三层结构的系统,如何实现在网络断开的情况下,客户端仍然能正常办理所需的业务?公文包究竟能有多少帮助? (300分)

S

siyan

Unregistered / Unconfirmed
GUEST, unregistred user!
原本是三层结构的系统,客户端处理数据显示及录入
应用服务器处理一些企业逻辑如生成键值,填写历史记录,关联表处理等
在网络断开的情况下,使用公文包方式,客户端只能处理一些简单的数据录入操作。
在我想来,这样已是比较完美的结构,
只是,对客户来说,系统使用怎样的结构与他无关,现有系统在网络断开时,
因无法获取服务器生成的一些键值,导致无法打印相关数据,公文包模式下
无法进行数据查询统计,因此客户无法满足于现有的功能,那我又能怎么样呢
推翻整个框架重新来过吗?
不改变系统框架的情况下,我们要怎么做呢?
——继续使用公文包技术?
那我们在客户端几乎要实现所有的企业逻辑。
首先,我们要在客户端生成各种键值
大多字段的编码规则均是用户所在部门ID加顺序码,客户端仍旧按照
这一简单的规则是无法生成唯一值的
此时,第一个问题出现了,我们要如何解决呢?
谁能帮帮我们!
 
客户端使用XML保存备存数据,同时向服务上发送数据,
断网时只在本地XML文件中写入数据与读取,
断网时间不能太长。。。。。。。。。。。。。。。。。。。。。。。。
 
这就要靠你去说服客户了
告诉他在断网的情况可以做什么不可以做什么
如果不连上网可以做所有事,还要连网干什么? 干脆做单机版得了。
如果做不了的,就要明确告诉他这个做不了,同时告诉他为什么,让他明白一些技术上的
东西有时候对开发人员还是有好处的。
好好地谈,大多数客户还是通情达理的。(我猜的话[:D])
 
现在的情况是这样的
他们有几个下属部门的广域网还没建立起来
估计一两年内都无法建立
所以他们要求我们能够实现单机操作
然后定时使用拨号连接将数据导入中心数据库
 
-> 在線:從數據庫查詢數據(導出)-> 離線:進行新增,瀏覽/列印,修改和刪除等操作
-> 在線:更新到數據庫(導入)
在网络断开的情况下,可以做的就是這么多.當它更新到數據庫中去的時候想辦法使到
數據同步就是了,特別是主键值的同步.
 
可是客户要在客户端生成各种键值,那又怎么办
 
可否考虑建离线的中间层,在线后做数据同步。
 
to ph8fish
什么意思?能否说得详细点?
 
沒所謂﹐在客戶端生成鍵值一樣可以﹐只要按照數據庫的規則就行了﹐數據不一定一樣﹐
到更新到數據庫時﹐再同步。如ph8fish說的一樣。
 
就是在客户端所在的地方也建立中间层和数据库,和原来的一样。
这样不用改原有的业务逻辑,但要增加客户端的网络判断功能以及客户所在地与原有数据库
的同步功能。
 
to dragonx23
有些键值对用户是可见的,打印时也要打印出来
这样生成后是不能再改的!
这样的话你的处理方法好像有点欠妥当!
to ph8fish
在客户端也建立中间层与数据库?
如果系统扩展或者版本更新需要更改中间层与数据库的结构?
客户端要如何同步呢?
客户所在地与原有数据库的同步功能。
这一点,我想也不是很好实现吧?

 
你要不改业务逻辑只能这样,数据同步应该不是很难吧。
至于系统扩展所产生的变化要改动中间层和数据库是再所难免的。
 
其实问题很明显,你要在离线状态下也能查询打印必须有本地数据库,有本地数据库就要和原数据库同步。
有了本地数据库,对数据处理的逻辑也必须在本地,如果本地数据库是原数据库的克隆就可以照搬原中间层。
 
其实我的想法是使用公文包技术将所需数据全部存为本地文件,
这样,当数据结构发生变化时,只要连上广域网
系统会从文件服务器下载最新的程序版本
运行程序,程序会将所需的新的数据结构下载到本地(覆盖原有文件)
这样就不会存在客户端的更新维护问题,对于系统的分发、扩展和维护
都比较有利。
只是这种方式,无法保证客户端生成的各种编号的唯一性,在我看来
在目前的模式下要实现本地办公,必须修改相应的企业规则,
我想建立每台机器IP的记录表,并按部门给其一个一位的编码值
(使用数字及英文字符可以有36个分配码,区分大小写则可以达到62个,
在未来三五年内都应该可以满足需求),然后客户端要生成的编号全部加上一位的
机器分配码,这样可以实现编码的唯一性;只是,由此又带来系统的分发问题
每增加一个客户端或客户端IP变化,都需修改分配码的配置信息,并重新打包分发,
不知道用户是否会觉得麻烦,而且这样修改企业规则,不知道客户是否同意。
而我想了解的,是对于这种三层结构又要实现本地办公的问题
大家有没有更好的解决方法?
 
只能使用数据同步,但是在用moden(窄带)的情况下数据同步很难!
 
读一下李维的书
 
to hfghfghfg
我已经读了很多遍了,可是他只是教我怎样使用公文包
却没有教我怎样做使用公文包的系统架构
 
cds.savetofile(xxx)
cds.loadfromfile(xxx);
input->disconnection server
query or make ID number:connect server
 
你要的键值可以在数据库里用触发器生成或在中间层TDataSetProvider的OnUpdateData事件里处理。
 
只是这种方式,无法保证客户端生成的各种编号的唯一性,在我看来
在目前的模式下要实现本地办公,必须修改相应的企业规则,
你可以采用ph8fish说的方法,可是你要对一些要同步的表进行特别的处理
意思就是这样,注册一个用户就预先分配ID的方式
用一些系统表记录分配的数值,ID不够了继续申请
 
顶部