A
Another_eYes
Unregistered / Unconfirmed
GUEST, unregistred user!
正方(书上说):
三层结构主要是为减少实现企业逻辑的中出现的困难。所以在客户端仅仅保持对用户
的界面,和一些基本的数据完整性的验证等,而真正的数据、逻辑思想都保持在服务
器端,从而使得企业逻辑体现得更完善,企业逻辑的更新对客户端的影响也会减少到
最低程度!使客户端真正形成“瘦客户”。
反方(我说):
正方的观点很天真. 我们来分析一下吧:
1.
>>而真正的数据、逻辑思想都保持在服务器端,
>>从而使得企业逻辑体现得更完善
这么做, 那么服务端就是一个绝对不存在通用性, 和您的应用紧密结合的专用程序
既然是一个专用程序, 那么放在服务端和放在客户端没区别, 硬要说只有放在服务端
才"使得企业逻辑体现得更完善"纯粹大话, 难道所有两层程序都不能"使得企业逻辑体
现得更完善"吗?
2.
>>企业逻辑的更新对客户端的影响也会减少到最低程度!
更是想当然的说法了, 别告诉我企业逻辑的变更不涉及数据库的变更, 而数据库的变更后,
为了这个变更能体现到用户, 不改变用户界面简直是天方夜谭(别拿报表字段计算公式
的变更做反驳我的例子, 我一直认为这种把具体计算公式写入报表程序的方法本身就
是一种错误, 这本应该属于通用报表的范畴).
既然如此, 那么我们就非常不幸地得到了一个恰恰相反的结论:
一旦企业逻辑变更, 我们不但要更新服务端程序(没办法, 所有企业逻辑的实现不是都
在服务端吗?),
而且要更新客户端程序(也没办法, 企业逻辑都变了, 你告诉我说所有输入, 输出的数
据格式都不变, 那不摆明了是骗人吗? 而且您将数据完整性校验放在客户端的, 不改变
客户端程序怎么可能实现企业逻辑的更新?)
3.
>>使客户端真正形成“瘦客户”。
"瘦客户"这个提法我一直认为是骗人的广告语. 如果按它的定义, 那么"瘦客户端"所
"瘦"掉的, 应该是维护成本, 稍微用脑子想想就知道在具体应用中这个提法多么荒谬
了, 如果应用中没必要修改程序时, 那么不管哪种结构的客户端, 它都不需要维护,
如果由于应用变化而需要修改程序, 那么不管哪种结构的客户端, 它都需要更新维护.
而我们完全可以在客户端程序中加入自动下载更新的代码达到客户端免维护的目的.
反方观点如下:
我们并不是说中间层不好. 只是我们的目光不应该放在什么"中间层实现企业逻辑, 客
户端实现用户界面"之类具有欺骗性的观点上.我认为中间层的优势在于负载平衡和数
据调度, 附带数据完整性检验与访问安全性控制. 开发中间层程序首先要考虑的是用
它能降低网络数据传输量, 并考虑原始数据计算过程+传输最后计算结果与直接传输
原始数据或经简单过滤的原始数据交由客户端进行计算, 他们的效率到底哪个更高
(毕竟中间层针对的不是一个客户端, 它得同时服务于几十上百个客户请求, 复杂的计
算对中间层效率的影响将是致命的), 还要考虑以后更新时中间层与客户端程序更新的
复杂程度(既然客户端程序总是要改的, 何不尽量少改中间层程序?). 另一个值得考虑
的问题是访问安全性控制. 我们当然可以直接使用DBMS的安全机制, 但大多数数据库
产品都是通用的, 而不是针对某个特定用户的, 研究它安全漏洞的人也车载斗量. 具体
应用时它的安全性也就大打折扣了, 而用中间层来实现安全机制的话, 由于我们可以
针对特定用户使用我们自己的安全控制, 不具备通用性, 被破解的可能性微乎其微(谁
愿意花那工夫?), 而被隔离了的数据库本身则根本不必担心遭受外界的攻击了.
关于B/S结构, B/S结构的Client是browser, 我一直认为这种结构根本不适合实
现企业级应用程序, 只有专用Client(包括使用专用插件的browser)才能和企业的实际
应用结合起来, Browser做出来的东西(不下载针对专门应用的专用模块的话)除了花架
子外毫无实用价值. 如果使用专用插件的话, 这个插件我们可以认为就是我们的Client
程序, 它也符合上述我方观点.
总之, 反方认为, 三层主要用途是负载平衡与数据调度, 而企业逻辑的实现则不是中间
层的使命, 相反, 大部分企业逻辑应当放在客户端(为以后更新方便). 只有那些能大
幅降低数据传输量, 计算又不太复杂的部分才应当放在中间层. 另外, 客户端提供自动
下载更新本身的功能是必不可少的, 应当作为客户端程序的密不可分的一部分.
三层结构主要是为减少实现企业逻辑的中出现的困难。所以在客户端仅仅保持对用户
的界面,和一些基本的数据完整性的验证等,而真正的数据、逻辑思想都保持在服务
器端,从而使得企业逻辑体现得更完善,企业逻辑的更新对客户端的影响也会减少到
最低程度!使客户端真正形成“瘦客户”。
反方(我说):
正方的观点很天真. 我们来分析一下吧:
1.
>>而真正的数据、逻辑思想都保持在服务器端,
>>从而使得企业逻辑体现得更完善
这么做, 那么服务端就是一个绝对不存在通用性, 和您的应用紧密结合的专用程序
既然是一个专用程序, 那么放在服务端和放在客户端没区别, 硬要说只有放在服务端
才"使得企业逻辑体现得更完善"纯粹大话, 难道所有两层程序都不能"使得企业逻辑体
现得更完善"吗?
2.
>>企业逻辑的更新对客户端的影响也会减少到最低程度!
更是想当然的说法了, 别告诉我企业逻辑的变更不涉及数据库的变更, 而数据库的变更后,
为了这个变更能体现到用户, 不改变用户界面简直是天方夜谭(别拿报表字段计算公式
的变更做反驳我的例子, 我一直认为这种把具体计算公式写入报表程序的方法本身就
是一种错误, 这本应该属于通用报表的范畴).
既然如此, 那么我们就非常不幸地得到了一个恰恰相反的结论:
一旦企业逻辑变更, 我们不但要更新服务端程序(没办法, 所有企业逻辑的实现不是都
在服务端吗?),
而且要更新客户端程序(也没办法, 企业逻辑都变了, 你告诉我说所有输入, 输出的数
据格式都不变, 那不摆明了是骗人吗? 而且您将数据完整性校验放在客户端的, 不改变
客户端程序怎么可能实现企业逻辑的更新?)
3.
>>使客户端真正形成“瘦客户”。
"瘦客户"这个提法我一直认为是骗人的广告语. 如果按它的定义, 那么"瘦客户端"所
"瘦"掉的, 应该是维护成本, 稍微用脑子想想就知道在具体应用中这个提法多么荒谬
了, 如果应用中没必要修改程序时, 那么不管哪种结构的客户端, 它都不需要维护,
如果由于应用变化而需要修改程序, 那么不管哪种结构的客户端, 它都需要更新维护.
而我们完全可以在客户端程序中加入自动下载更新的代码达到客户端免维护的目的.
反方观点如下:
我们并不是说中间层不好. 只是我们的目光不应该放在什么"中间层实现企业逻辑, 客
户端实现用户界面"之类具有欺骗性的观点上.我认为中间层的优势在于负载平衡和数
据调度, 附带数据完整性检验与访问安全性控制. 开发中间层程序首先要考虑的是用
它能降低网络数据传输量, 并考虑原始数据计算过程+传输最后计算结果与直接传输
原始数据或经简单过滤的原始数据交由客户端进行计算, 他们的效率到底哪个更高
(毕竟中间层针对的不是一个客户端, 它得同时服务于几十上百个客户请求, 复杂的计
算对中间层效率的影响将是致命的), 还要考虑以后更新时中间层与客户端程序更新的
复杂程度(既然客户端程序总是要改的, 何不尽量少改中间层程序?). 另一个值得考虑
的问题是访问安全性控制. 我们当然可以直接使用DBMS的安全机制, 但大多数数据库
产品都是通用的, 而不是针对某个特定用户的, 研究它安全漏洞的人也车载斗量. 具体
应用时它的安全性也就大打折扣了, 而用中间层来实现安全机制的话, 由于我们可以
针对特定用户使用我们自己的安全控制, 不具备通用性, 被破解的可能性微乎其微(谁
愿意花那工夫?), 而被隔离了的数据库本身则根本不必担心遭受外界的攻击了.
关于B/S结构, B/S结构的Client是browser, 我一直认为这种结构根本不适合实
现企业级应用程序, 只有专用Client(包括使用专用插件的browser)才能和企业的实际
应用结合起来, Browser做出来的东西(不下载针对专门应用的专用模块的话)除了花架
子外毫无实用价值. 如果使用专用插件的话, 这个插件我们可以认为就是我们的Client
程序, 它也符合上述我方观点.
总之, 反方认为, 三层主要用途是负载平衡与数据调度, 而企业逻辑的实现则不是中间
层的使命, 相反, 大部分企业逻辑应当放在客户端(为以后更新方便). 只有那些能大
幅降低数据传输量, 计算又不太复杂的部分才应当放在中间层. 另外, 客户端提供自动
下载更新本身的功能是必不可少的, 应当作为客户端程序的密不可分的一部分.