`
achun
  • 浏览: 317941 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

降低前后台业务逻辑上的耦合度,前后台细粒度数据通讯的方法

    博客分类:
  • jCT
阅读更多

题的提出 :

jCT模板属于前后台分离的设计.

对于前后台分离的设计.

S根据B提出的请求,发送原始数据,S不需要对表现层有任何控制,降低了B,S的耦合度.

这种降低了B,S的耦合度方法,本质上是降低了 数据内容 上的 耦合度 ,仅仅把表现层的控制数据分离出去了.

由于请求和数据直接影响到表现,表现 业务逻辑 的最直接体现,但是 这两个词不能画等号.因此我们用表现逻辑 这个词.暗示表现和业务逻辑是关联比较密切的.

表现逻辑 变化的时候,势必要 改变 后台数据内容 的组合结构,我们的问题就是

如何降低前后台 表现逻辑( 业务逻辑) 上的耦合度


附加举例 说明问题:

常见的页面上有多种访问(按日,月,年或分类)排名,如果我们要增加或减少一个排名规则的话,表现 是要改的,后台 数据内容 也要同期改,这就是耦合度高的问题.

当然,对于新增的表现,采取多次和后台通讯也是一种解决方法,不过这增加了通讯的次数.

我们要达到只需要 表现,不用改 后台 ,并且不增加通讯次数的目标.


问题分析 :

表现逻辑 最终体现在原始数据的变化上.

业务逻辑对数据的细粒度化是比较容易实现的,就是把数据的请求最小化,然后把多个请求 获得的数据组合输出就行了.这在设计中是常见的.最简单的就是按请求的次序 请求队列 ,输出关联数组结构 的数据就行了.

那要解决的问题就是,前台如何在一次通讯中发出 请求队列 ,后台如何正确解析 请求队列 的问题.


解决方案 :

这里我直接给出我的方案,

利用POST方法和GET参数的配合.

在实际使用POST和GET方法的时候我们通常是用参数名=值 ,这种值对 的形式提交,事实上http协议并没有限定死这种形式,我们这种形式对http协议来说只不过是一串字符串罢了.用ajax 方法提交数据的时候是可以直接传送以JSON形式 的数据的,这就是纯字符串了.JSON 对数据的表现能力是毋庸置疑的.经后台解析后才对象化的.

我们可以把 请求队列 JSON 形式与后台通讯,后台完成 请求队列 解析.当然对于ajax 来说使用POST 方法

无疑是很好的,因为POST 方法其实是兼容GET 的,ajax 请求中的url 参数就是GET 方法的实现.那GET参数 在这里有什么用途呢?共用参数 的传递(这个语言描述就到这里,做个应用的朋友应该已经明白了).

ajax POST的数据是JSON字符串格式,比如:

写道
{"login":{"name":"youname","pw":"123456"},"onlineusers":true}
 

我一直用PHP编程,php获得POST过来的JSON数据是很容易的

写道
$json=file_get_contents('php://input');
$json=json_decode($json,true);

 

到此 请求队列 的数据通信解决了,后台获取解决了,解析呢?这恐怕要和你的应用有关了.解决起来类似于如下结构

 

写道
$OUT=array();
foreach($requireQueue as $Q){
  switch($Q['REQUIRE']){
    case 'login':
      $OUT['login']=login();break;
    case 'onlineusers':
      $OUT['onlineusers']=onlineusers();break;
  }
}

 

 

switch..case 就是细粒度的实现了.可以看出,在业务逻辑确定的情况下,表现只需要改变请求的队列的组合 就可以一次通讯获取 数据 了.

 

==========ps============

很遗憾,由于人事变动,我不再参与www.91mh.net这个项目了,项目负责人又回到了古老的编程方法,这个网站已经不采用我的技术了,回头有新的站我再给出新的地址吧。

分享到:
评论
8 楼 chanawudi 2008-06-08  
。。。。。好像没看懂。。。我js实在不行啊。。。
7 楼 achun 2008-06-08  
以前写的站就不提了,今天开始写了个新的站
http://www.16lo.com/
仅仅是输出了一行文字,不过整个流程已经明朗了。
6 楼 chanawudi 2008-06-08  
achun 写道
另外就是,新的jCT里面包含了一些更灵活的东西
http://www.91mh.net/js/jct3.js
因为一些名字我还觉得不合适,没有更新,你可以测试一下。
参见一下变更的文章
jCT更新计划:inline,entry,outlet


好的。

另外,你有没有一个比较大的demo可以让我看看,或者说用这种模式开发的样例站,我要亲身体验一下。
5 楼 achun 2008-06-08  
大项目我也没有做过。高高在上很简单,看工资,看谁主导项目就知道了。
我的团队中,美工是不会代码的,只是作图,写html/css的必须会javascript,他们属于程序员,
至于action多,增加了沟通的问题,实际情况是这样的。
首先所有的action应该都是和应用业务需求有关的,应该是在业务分析阶段就确定的。
以后有没有变化,项目组的人都应该了解这个内容,这个成本是无法下降的。
后台可以先输出模拟数据,这个很容易吧,再说实际上是后台好写,前台工作量大,后台总能先完成的。

效率问题我的几个项目里已经证明过了。在客户不停的改业务需求,改表现的情况下,通常是1,2个小时内就实现了他的变更需求。

完美我到不奢望,首先要达到自由。

还有就是我作为我们团队的领导人,有责任想办法提高他们的收入,多干活和提高自身水平是关键。
我现在的这个模式,为达到这个目的提供了一个基础。

由于这个模式也是最近我才确定的,所以也要多实践,前面实践的几个项目,都是边思考边实现的,很不成熟,现在思路基本成型了。我准备再次实做一个站,测试一下效率问题,
现在正在落实一些此模式下细节的思路,落实后,就可以开工了。
4 楼 chanawudi 2008-06-08  
   或许是我现在做的都是小项目,对于你说的后台程序员高高在上制定规则的感触不是很多,我们在做项目的时候往往是后台程序员做到把服务器端模板写好(比如freemarker,没有css,有少量简单的js),然后把这个交给前台美工(在我们小组中,他们确实只是美工。。)。在这个过程中,你所谓的过多的沟通几乎没有,后台负责数据和模板制作(都是div),前台就写css和布局。我想很多小项目组都是这个流程吧。

  再反过来,如果按你的思路来,我们写完细颗粒action,然后让美工去操作这些json,虽然愿望挺美好,但是好像不太现实,首先对前台程序员的要求就提高不少,还有,如果在小项目中,这样反而增加了沟通,因为后台必须说明哪些action输出什么,而且有时候前台需要什么但是现在还没有这些action,那么就要告诉后台我需要什么,你给我弄个action,这难道不是增加沟通吗?

  你说设计的模式其实是很美好的,是很人性的,那个时候前台程序员也可以自由写程序,但是我们的老板不会这么想吧?老板要的是效率和成本。。。。

  再肯定下,你这种模式应该是可行的,但是如你那样完全通过解耦合,我始终觉得不是完美的解决方法,思索中。。。。。
3 楼 achun 2008-06-08  
另外就是,新的jCT里面包含了一些更灵活的东西
2 楼 achun 2008-06-08  
<div class='quote_title'>chanawudi 写道</div>
<div class='quote_div'><br/> 1.把模板解析放到的浏览器中,如果客户端不支持js,就比较惨了,虽然现代的浏览器几乎都支持,而且用户没事一般也是开的,但是对于天生最求完美的程序员,这始终会是一个心病。</div>
<p><br/>是的,客户端必须要有执行脚本的能力,其实我的最终目标里根本就是自己写一个客户端,他的意义就不说了。</p>
<div class='quote_title'>chanawudi 写道</div>
<div class='quote_div'><br/> 2.js开发比较繁琐,就算你解析引擎做到在好,还是需要写很多的js代码去读取json等操作,这对于一般的程序员是比较烦人的(也就是为什么google的GWT和 DWR 存在的理由,一般程序员喜欢在java中做事)。</div>
<p><br/>有什么是不麻烦的呢?熟悉的东西都不麻烦,不熟悉的才麻烦,作为程序员是要学习多门语言的。js只不过是其中一种罢了。java也只是一种,想要只用一种语言搞定所有的事情是不科学的,因为语言也在发展,都在变。因此我们要学习不同的东西。</p>
<div class='quote_title'>chanawudi 写道</div>
<div class='quote_div'><br/>我在设计的MVC框架,考虑如果集成js template 的话,要能够在服务器端自动或半自动生成模板解析的js代码,让程序员尽量的通过服务器端的方法来完成客户端js模板的解析工作,这听起来似乎有点矛盾。。。不知道你怎么看?或者说这里是不是存在一种新的web开发模式,但不仅仅是ajax+json+js template那么简单。</div>
<p><br/>在服务器端来做模板本来就是常规的做法,但是我反对这种方法,因为这种方法把数据和表现耦合的太紧了,<br/>解决耦合性问题是我做这些工作的基础。离开了这个基础我的方法就没有可取的地方了。</p>
<div class='quote_title'>chanawudi 写道</div>
<div class='quote_div'><br/>看了你这篇文章又让我吃惊了一下,确实,如果ajax中请求一个action队列,然后返回队列合并结果,这种模式可以有效的降低服务器action的颗粒度,也保证了action的重复运用,这就相当于把一个action到做一个组件或者一个方法,然后一个请求队列来了后调用分别的action在组合,返回给用户。这个实现在我现在的框架下可以很轻易地实现,更不不需要你说的那么麻烦的方法。在配合 json和js template。。我感觉似乎一种新的 模式即将出现。<br/>在考虑是否与你的jct整合,javaeye上我一般不来,喜欢和你深入的交流.</div>
<p><br/>呵呵你的文字也是渐进式的表达你思想的变化。如果你实做这个的话,你会发现,只有把表现完全在客户端做才能发挥这种模式的好处。<br/>因为我倡导jCT(应该说是前台模板)和细粒度action有一个原因就是:<br/>WEB的开发,对于大多项目(中小项目),主要的工作量和难度是在前台表现上,而这个任务目前是由后台完成的,<br/>而做后台的人大多都是项目中的领导,他们在工作的时候往往只是做很少的辅助工作(选择框架,制定规范,这是一种交叉的规范,涉及到B和S,反正都是在约束别人)来完成表现问题,而具体的实现还要靠前台html/css/javascript人员(我把html/css的开发者也叫做程序员,同样整理文档的文案人员也叫程序员,因为他们都写逻辑性很强的code),这种局面是不正确的。这些中方法只能给前台程序员更多的限制,不能随意写代码,不能提高他们的专业能力(因为受限)。所以我对这种开发模式的评价只有两个字:<br/>专制<br/><br/>这种限制导致程序员生态的不平衡,后台程序员地位高高在上,虽然主要的工作量还在前台程序员那里。而且前台程序员不能自由的写代码,无法很好的提高。这明显是专制体制下导致的程序员阶级。<br/><br/>用了jCT和细粒度action,会发现后台超级简单,<br/>好了前台程序员解放了,可以按自己的意愿写代码,提高自己的能力,待遇也要提高了。<br/>虽然我是做后台的,但是同样我也解放了自己,我可以做更多其他的工作了,不用总是为别人制定规范了。<br/><br/>畅想一下,如果这种专制继续下去,不管语言如何发展,框架如何高能,都摆脱不了交叉规范的问题,程序员阶级势必存在。<br/></p>
<p><strong>最重要的,其实我真的一直在讨论的是一种模式,我不关系是不是什么新的,只要有效就行,对于这种模式的实现,我也仅仅是提供了一个很小的简短的工具和一个数据通讯的方法,在这种模式下具体的细节实现有很多方法,大家都可以实做一个。</strong></p>
1 楼 chanawudi 2008-06-07  
你好,关注你的jct有一段时间了。可以说我了解js template就是从jct开始的。而且从html注释入手的方法也是值得提倡的。我最近在开发一个java 的MVC框架(类似struts),其中有一种View可以在直接返回任何对象的json,非常适合js template的整合,所以最近一直在考虑是否整合一个js template,但是由于考虑到js template以下的局限性,一直迟迟没有决定:
1.把模板解析放到的浏览器中,如果客户端不支持js,就比较惨了,虽然现代的浏览器几乎都支持,而且用户没事一般也是开的,但是对于天生最求完美的程序员,这始终会是一个心病。
2.js开发比较繁琐,就算你解析引擎做到在好,还是需要写很多的js代码去读取json等操作,这对于一般的程序员是比较烦人的(也就是为什么google的GWT和 DWR 存在的理由,一般程序员喜欢在java中做事)。

我在设计的MVC框架,考虑如果集成js template 的话,要能够在服务器端自动或半自动生成模板解析的js代码,让程序员尽量的通过服务器端的方法来完成客户端js模板的解析工作,这听起来似乎有点矛盾。。。不知道你怎么看?或者说这里是不是存在一种新的web开发模式,但不仅仅是ajax+json+js template那么简单。

看了你这篇文章又让我吃惊了一下,确实,如果ajax中请求一个action队列,然后返回队列合并结果,这种模式可以有效的降低服务器action的颗粒度,也保证了action的重复运用,这就相当于把一个action到做一个组件或者一个方法,然后一个请求队列来了后调用分别的action在组合,返回给用户。这个实现在我现在的框架下可以很轻易地实现,更不不需要你说的那么麻烦的方法。在配合 json和js template。。我感觉似乎一种新的 模式即将出现。

在考虑是否与你的jct整合,javaeye上我一般不来,喜欢和你深入的交流.

相关推荐

    基于ARM架构服务器部署docker-compose

    基于arm64版本的docker-compose文件

    附件3-4:台区智能融合终端全性能试验增值税发票开具确认单.docx

    台区终端电科院送检文档

    埃夫特机器人Ethernet IP 通讯配置步骤

    埃夫特机器人Ethernet IP 通讯配置步骤

    rv320e机器人重型关节行星摆线减速传动装置研发.rar

    rv320e机器人重型关节行星摆线减速传动装置研发

    气缸驱动爬杆机器人的设计().zip

    气缸驱动爬杆机器人的设计().zip

    软件工程中期答辩1234567

    56tgyhujikolp[

    基于OpenCV的数字身份验证系统:人脸检测、训练与识别的Python实现

    内容概要:本文档提供了基于OpenCV的数字身份验证系统的Python代码示例,涵盖人脸检测、训练和识别三个主要功能模块。首先,通过调用OpenCV的CascadeClassifier加载预训练模型,实现人脸检测并采集多张人脸图像用于后续训练。接着,利用LBPH(局部二值模式直方图)算法对面部特征进行训练,生成训练数据集。最后,在实际应用中,系统能够实时捕获视频流,对比已有的人脸数据库完成身份验证。此外,还介绍了必要的环境配置如依赖库安装、文件路径设置以及摄像头兼容性的处理。 适合人群:对计算机视觉感兴趣的研发人员,尤其是希望深入了解OpenCV库及其在人脸识别领域的应用者。 使用场景及目标:适用于构建安全认证系统的企业或机构,旨在提高出入管理的安全性和效率。具体应用场景包括但不限于门禁控制系统、考勤打卡机等。 其他说明:文中提供的代码片段仅为基本框架,可根据实际需求调整参数优化性能。同时提醒开发者注意隐私保护法规,合法合规地收集和使用个人生物识别信息。

    Java并发编程面试题详解:123道经典题目解析与实战技巧

    内容概要:本文档详细介绍了Java并发编程的核心知识点,涵盖基础知识、并发理论、线程池、并发容器、并发队列及并发工具类等方面。主要内容包括但不限于:多线程应用场景及其优劣、线程与进程的区别、线程同步方法、线程池的工作原理及配置、常见并发容器的特点及使用场景、并发队列的分类及常用队列介绍、以及常用的并发工具类。文档旨在帮助开发者深入理解和掌握Java并发编程的关键技术和最佳实践。 适合人群:具备一定Java编程经验的研发人员,尤其是希望深入了解并发编程机制、提高多线程应用性能的中级及以上水平的Java开发者。 使用场景及目标:①帮助开发者理解并发编程的基本概念和技术细节;②指导开发者在实际项目中合理运用多线程和并发工具,提升应用程序的性能和可靠性;③为准备Java技术面试的候选人提供全面的知识参考。 其他说明:文档内容详尽,适合用作深度学习资料或面试复习指南。建议读者结合实际编码练习,逐步掌握并发编程技巧。文中提到的多种并发工具类和容器,均附有具体的应用场景和注意事项,有助于读者更好地应用于实际工作中。

    个人健康与健身追踪数据集,包含了日常步数统计、睡眠时长、活跃分钟数以及消耗的卡路里,适用于数据分析、机器学习

    这个数据集包含了日常步数统计、睡眠时长、活跃分钟数以及消耗的卡路里,是个人健康与健身追踪的一部分。 该数据集非常适合用于以下实践: 数据清洗:现实世界中的数据往往包含缺失值、异常值或不一致之处。例如,某些天的步数可能缺失,或者存在不切实际的数值(如10,000小时的睡眠或负数的卡路里消耗)。通过处理这些问题,可以学习如何清理和准备数据进行分析。 探索性分析(发现日常习惯中的模式):可以通过分析找出日常生活中的模式和趋势,比如一周中哪一天人们通常走得最多,或是睡眠时间与活跃程度之间的关系等。 构建可视化图表(步数趋势、睡眠与活动对比图):将数据转换成易于理解的图形形式,有助于更直观地看出数据的趋势和关联。例如,绘制步数随时间变化的趋势图,或是比较睡眠时间和活动量之间的关系图。 数据叙事(将个人风格的追踪转化为可操作的见解):通过讲述故事的方式,把从数据中得到的洞察变成具体的行动建议。例如,根据某人特定时间段内的活动水平和睡眠质量,提供改善健康状况的具体建议。

    《基于YOLOv8的港口船舶靠泊角度偏差预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    nginx 访问访问日志按天切割 shell脚本

    nginx

    《基于YOLOv8的核废料运输容器密封性检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    《基于YOLOv8的农业无人机播种深度监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    uniapp知识付费(流量主)demo

    模拟知识付费小程序,可流量主运营模式

    java高并发之分片上传

    什么是普通上传 调用接口一次性完成一个文件的上传。 普通上传2个缺点 文件无法续传,比如上传了一个比较大的文件,中间突然断掉了,需要重来 大文件上传太慢 解决方案 分片上传

    英二2010-2021阅读理解 Part A 题干单词(补).pdf

    英二2010-2021阅读理解 Part A 题干单词(补).pdf

    2023-04-06-项目笔记 - 第四百五十五阶段 - 4.4.2.453全局变量的作用域-453 -2025.04-01

    2023-04-06-项目笔记-第四百五十五阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.453局变量的作用域_453- 2025-04-01

    友缘公司钢材管理平台微信小程序的设计与实现.zip

    微信小程序项目课程设计,包含LW+ppt

    GP300单缸液压圆锥破碎机CAD().zip

    GP300单缸液压圆锥破碎机CAD().zip

    实用telnet调试工具

    超实用telnet调试工具,支持重连,命令定时发送,日志存储等。

Global site tag (gtag.js) - Google Analytics