为什么要分层呢?——大部分人是为了分层而分层,比如我们以前的一个做法就是强制一个实体对应一个dao、一个service一个action等等,就像是写八股文章,还美其名曰规范化,为了以后好维护。结果都是一两行的代码在几层之间包来包去。
我觉得分层最主要的目的是解耦。很多人可能觉得分层是为了分类职责,这可能是分层带来的一个好处,但不是主要目的。要的目的是解耦,解耦的主要目的是应对变化。比如我分一个dao层,可以屏蔽掉hibernate或jpa或jdbc的具体实现,这样我可以切换不同的实现了。你看spring里边的petstore例子提供了不同的实现。
问题是对于变化我们应该什么态度。我觉得应该在三个方面考虑:1.变化发生的可能性和机率;2.提前准备应对这个变化要增加的成本(包括机会成本)3.如果不提前考虑这个变化,以后通过重构来应对的代价。
比如你有多大的可能要切换hibernate到jdbc或其他的实现呢?如果hibernate已经被证实足够稳定,那依赖它有什么问题呢?就像你依赖java.util一样是吧。这种被Rod JSon成为“幻影需求”提前为此而分层实在不值得吧。其实就算你分了层以后切换的时候还是会有很多问题的(比如你用了hibernate的二级缓存、关联关系要是切换到其它实现,很容易引入潜在的问题),除非你的应用就像petstore一样简单。所以与其这么做,不如完善你的测试,如果变化来了,有测试做保障,提炼重构付出的代价不一定比你提前预防这种变化的的代价要大很多。而且一定要考虑这种变化的机率的大小。
分层的另一个好处是可以做孤立测试,说白了就是分离职责然后单独测试。但我前面说过分离职责不一定要分层的,如果这种情况不是很多,你可以把业务复杂职责单一的功能放在同一层中另外一个类中。
我现在的做法是用spring web flow做控制层,不需要java代码,只要xml的flow定义,其中调用service层。这个service层负责事务边界也代理业务,service方法中直接调用JPA接口。domain对象除了jpa等元数据的映射,提供一些get方法(我是说计算方法,比如getTotalSize()),还提供一些验证逻辑。页面使用Rich Faces。
service测试大部分不做mock,而是连接数据库做测试,spring test框架支持自动回滚,可以用dbunit初始化测试数据就可以了。业务计算复杂的,如果不依赖于数据存储,应该放在domain对象中,否则,提炼出一个service类,这样对这段逻辑就可以做孤立测试了。domain就是普通的javabean,测试自然没有问题。
可能以后还想加上selenium做验收测试,现在还没有加。
分享到:
相关推荐
总结来说,ChatGPT技术的生成回复质量评价是一个多维度的过程,包括语义准确性、逻辑一致性、信息丰富度、可读性和流畅度以及情感表达和人性化。这些标准相互关联,共同决定了回复的质量和用户体验。通过不断优化...
在本项目中,“chatgpt进行论文全文总结+专业翻译+润色+审稿+审稿回复.zip”文件包展示了ChatGPT在学术领域的应用,包括论文的总结、翻译、润色、审稿以及审稿回复等多个环节,为科研工作者提供了一站式的解决方案。...
总结,设计与实现留言板系统是一个综合性的任务,涉及到前端、后端、数据库、安全以及性能优化等多个方面。通过合理的技术选型和严谨的开发流程,可以构建出稳定、高效、安全的留言板系统,为用户提供优质的互动体验...
在Web开发领域,BBS(Bulletin Board System,电子公告板)是一种常见的交互式应用,用户可以在这里发布信息、交流观点。本篇将深入探讨如何使用Java技术栈,特别是JSP和Servlet,结合MVC(Model-View-Controller)...
3. **客观性与中立性**:为了保证模型生成的内容公正无偏,所使用的语料应尽量减少主观色彩和个人偏好,避免特定立场或观点的影响。 #### 四、语料库清洗策略 1. **自动化筛选**:利用自然语言处理技术自动识别并...
3. 帖子回复:用户可以对已有的主题进行回复,展开讨论。 4. 搜索与浏览:提供按时间、热度、关键词等条件的帖子搜索和筛选功能。 5. 用户权限管理:不同的用户等级可能有不同的操作权限,如编辑、删除自己的帖子或...
2. 发帖和回复:用户可以发布新的主题,对其他主题进行回复,同时系统需要维护帖子的顺序和关联性。 3. 分类和标签:论坛通常会按主题分类,用户可以选择合适的分类发布帖子,也可以通过标签进行关键词检索。 4. ...
因此,对ChatGPT的回复进行审核和筛选是必要的,以确保对话的可靠性和质量。另外,ChatGPT的回复可能缺乏连贯性,可能需要我们进行适当的引导,确保对话始终围绕主题进行。 在实际应用中,主动主题引导的对话生成...
例如,在模型的训练数据中,可以排除那些包含有偏见内容的样本,或是对训练数据进行加权处理,使得不同观点能够得到平衡的表达。 其次,ChatGPT技术还可以通过追加多样的训练数据来增加模型的多样性和包容性。通过...
在信息技术领域,BBS(Bulletin Board System,电子公告板)是一种早期的在线社区形式,用户可以在这里发布信息、交流观点。本项目以Java编程语言为基础,构建了一个简单的BBS论坛系统,旨在提供一个基本的用户交互...
情感分析是当前信息时代的重要技术,它主要通过对文本中的情感倾向进行挖掘,来理解语言中的态度、观点和情感。此系统旨在提升社交软件中表情包和emoji的管理效率,减少用户手动选择的不便,尤其对于拥有大量表情包...
ChatGPT能够通过对话形式帮助团队成员快速获取所需信息,并对信息进行分类和总结。例如,当团队成员询问某个项目的进度时,ChatGPT可以根据数据库中的最新信息进行汇总并反馈给提问者,确保每个人都掌握最新进展,...
该技术的优势在于大规模知识获取、快速生成回复、匿名性与客观性。然而,其限制主要体现在实时知识更新、理解和应用场景上的局限性以及隐私和伦理问题。对 ChatGPT 技术的认识有助于我们更好地了解其应用和潜在影响...
这项技术通过深度学习模型,从大规模的语料库中学习,能够生成连贯、逻辑性强的回复,极大地提升了对话内容的多样性和个性化。 首先,ChatGPT技术显著提高了对话内容的创作自由度。传统的对话生成方法往往依赖于...
总结来说,ChatGPT技术在异步通信上通过语音转文本、信息摘要和多模态输入增强了非同步交流的便捷性和多样性,而在实时对话中,凭借上下文管理、用户意图识别和对话策略优化,提升了对话的连贯性、准确性和个性化。...
评论管理同样重要,它允许用户对帖子发表观点,同时支持回复和删除评论。这一部分通常通过AJAX(Asynchronous JavaScript and XML)实现异步通信,提升用户体验。在服务器端,可以使用JSON格式传输数据,提高数据...
在设计数据库时,通常会包括用户表、主题表、回复表等,通过建立合理的数据模型和关系,确保数据的完整性和一致性。 【用户注册与登录】 用户注册和登录是BBS系统的核心功能之一。用户需要注册并创建账户,以便发布...
首先,这个系统实现了基本的在线留言功能,允许用户发表自己的观点或咨询。用户只需填写详细的个人信息和留言内容,即可提交留言。这一过程涉及到C#中的ASP.NET Web Forms技术,它提供了事件驱动的编程模型,使得...
- **自动摘要**:对长篇报告进行总结,提取关键信息,节省阅读时间。 - **文本生成**:自动生成合同、报告等标准化文档,提高效率,减少人为错误。 5. **合规性检查**: - **规则匹配**:NLP可以帮助企业自动...