注释不好吗?

前几天,我在有关Spring XML与注释的文章中运用了自己的原则,轻松进入了这个主题。 对于我目前正在编写此新应用程序的团队来说,这种简单的输入方式也是我不会使事情复杂化的方式,该应用程序的生产寿命可能为3-5年(如果我们做得对,并希望技术世界成真)不会改变它的头)。

从1.1开始,我一直在使用Spring Days,所以是的,我对使用非常大和复杂的XML感到很满意。 但是,我知道如何写它们,更重要的是,我知道如何阅读它们。 从那时起,Spring使开发人员易于理解它们-带有Beans Explorer / Graph的Spring STS。 现在,开发人员无需担心查看多个XML,这些工具甚至可以为他们编写和管理bean来完成工作。

为了提高开发人员的生产力,短期内我们会牺牲编写优质性能代码的技巧

自从我看到Spring 3.x引入了基于注释的配置这一概念以来,使用这些注释而不是使用XML的炒作至少已有7年之久(如果我没记错的话)。 我无法通过改变方向来实现和平。

不说不好
,但是此功能几乎没有被社区滥用,而是Spring一直在推广滥用行为。 今天的任何Spring文档都只讨论注释样式的编码,然后再遵循“经典XML方式”进行处理。

人们说– 阅读代码 更容易,使用批注中的代码调试代码更容易 ,他们忘记了代码中不再是什么代码–他们在代码中嵌入了配置。 据我所知,配置应该被外部化。 在我们使用Hibernate和JPA之类的ORM框架的情况下,问题更加严重。

即使在原始的Spring设计中,甚至在使用XML的情况下,我都觉得设置Spring应用程序的方式并不是Spring设计的目的。 是时候让我去了解罗德·约翰逊(Rod Johnson )在设计Spring时的想法了(我知道一点,但我需要找到一些细节并深入了解)。 但这就是另一天。

因此,让我们看一下该博客文章 ,其中解释了如何将JPA与Spring一起使用或阅读此StackOverFlow线程 。 很好,他们都解释了如何使用,但是很快我们意识到,但是在代码中使用这些所谓的基于Rich Annotation的配置,我们已经淡化了代码/设计应该是的总体含义。 当我必须尝试一些新的事物作为个人宠物项目以快速起步时,这种编程风格非常有用–我可以编写一堂课,键入一些注释并Swift做好准备进行CRUD的工作,但这确实有效在企业级应用程序中,尤其是在生产中如何进行管理。

这些文章不过是一堆希望我们使用这些框架和新功能的市场营销/销售推销,但它们几乎没有将我们在大型生产系统中必须处理的复杂情况置于上下文中。

在2007年,我们在项目中广泛使用了休眠模式(带有基于XML的Spring 2.x配置),很快我们意识到,ORM框架已经超越了它的范围。 我们遇到了复杂的查询,试图将其改编到Hibernate中,并且有可能在MS-SQL中将其编写为优化的过程,并且消除这些查询现在已成为主要瓶颈。 我刚接触过该框架,但更重要的是,我的技术领导者曾全力使用Hibernate。 这些人可以访问我之前分享的文章,这看起来很可行,但是他们只是销售Hibernate和ORM带来的功能的营销材料。 当我遇到麻烦时,我不得不回头去重构代码,并遵循良好的旧查询编写方法。

这些使用注解的框架在90%的情况下都能很好地工作,但是当这些注解失败时,您需要系统在压力下执行的那10%正是

现在回溯到Spring和Annotations –为什么我不喜欢它们? 仅仅是因为它们使我像在学习某个东西的大学生一样编写代码。 他们迫使我摆脱过去黄金时代的良好做法。 是的,它过去花费一些时间来建立一些类,并且花费时间来编写SQL查询,但是我在正确的地方放置了正确的东西。 是的,我们花了很多时间才能蓄势待发,但是一旦我们紧紧设置了这些基础知识,不仅可以提高开发速度,而且还可以正确地完成任务。

是的,没有人可以强迫我们,但是普通的Joe开发人员或普通的Jim建筑师没有时间和意愿来制作这些POV,他们在Google上进行搜索,当他们看到5篇文章说同样的话时,他们认为这是做正确的事,他们会快乐地前进。 我们的许多高级技术人员也阅读了这些文章,为设计提供了支持,并且多次挑战了我要放在此处的观点。

TLDR;

考虑一下,请不要使用注释来配置您的应用程序。 配置从来都不打算成为代码的一部分-之所以称为配置。 所以,让我们成为现实。 短期内获得少量收益不会大有帮助,特别是当客户要求更改表或值并且您告诉他这将需要5天的开发,测试和部署时。

翻译自: https://www.javacodegeeks.com/2015/08/are-annotations-bad.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端工程师应该达到什么水平,找工作薪资才比较高?

当然是水平越高,越容易找到工作,薪资越高在竞争这么激烈的2020年,就需要更加的努力,充实自己,让自己不被代替!两条路:自学或者找培训班,找培训班的话,我推荐达内和传智播…

【转】使用JMeter对数据库做压力测试

作为一名开发人员,大多情况下都会认真的做好功能测试,但是却常常忽略了软件开发之后的压力测试,尤其是在面向大量用户同时使用的Web应用系统的开发过程,压力测试往往是不够充分的。近期我在一个求职招聘型的网站项目中就对压力测试…

python中的大数据品牌运营专业公司_国内最好的专业数据分析公司有哪些?

说说我知道的几家,都是在各自领域最好的。大数据平台星环,做Hadoop生态系列的大数据底层平台公司。也是国内唯一入选过Gartner魔力象限的大数据平台公司。Hadoop是开源的,星环主要做的是把Hadoop不稳定的部分优化,功能细化&#x…

POC以及day下载链接地址

POC以及day下载链接地址 https://github.com/Threekiii/Awesome-POC https://github.com/coffeehb/Some-PoC-oR-ExP https://github.com/PeiQi0/PeiQi-WIKI-Book https://github.com/luck-ying/Library-POC https://github.com/helloexp/0day https://github.com/BaizeSec/byl…

孙叫兽进阶之路之Gitlab的使用(图文教程)

简介: GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的…

PyQt4(使用ui)

1.使用qt designer设计界面,保存为test1.ui: 2.使用pyuic4 test1.ui -o ui.py生成ui代码。 3.程序载入。 import sys import ui from PyQt4 import QtCore, QtGuiclass MyWidget( QtGui.QWidget ):def __init__(self):super(MyWidget, self).__init__() …

docker升级步骤及注意事项

centos系统默认安装的docker版本是1.13版本,在安装部分镜像时可能出现兼容问题,本文通过实际操作总结Docker升级最新版本步骤及可能出现的问题,供各位参考。 环境:CentOS Linux release 7.6.1810 (Core) docker升级操作&#xf…

孙叫兽进阶之路之源代码配置管理过程(图文教程)

简介:配置管理(Configuration Management,CM)是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。配置管理的目标是记录软件产品的演化过程,确保软件开发者在软件生命周期中各个阶段都能得到精确的产品配置。

进击的Objective-C--------Objective-C基础(-)

1.面向过程和面向对象(面向对象三大特性:封装 继承 多态)面向对象编程:分析解决问题组成的对象,从中抽象出类,调用方法(协调对象间的联系与通信),解决问题.面向过程编程:分析解决问题的步骤,实现函数,一次调用2类和对象:类和对象是面向对象的核心类:具有相同特征和行为的事物的…

ivy maven_将Maven与Ivy集成

ivy maven问题是:您在Ivy存储库中(只有那里)有一些资源,您想在基于Maven的项目中使用这些资源。 可能的解决方案: 由于Ivy可以轻松使用Maven样式的存储库(因此,您的Ivy客户端可以继续使用Ivy并进…

video 微信 标签层级过高_什么是微信小程序二级分销系统?如何玩转?

微信二级分销系统是通过帮助企业打造微分销商城,从店铺、商品、会员、分销、营销、数据分析等不同功能模块,让一个微信店铺焕发无限可能。微分销系统基于二级分销,以全员开店,以客推客模式迅速推动销量增长,快速招募微…

docker搭建简单的ctf题目

0x01 docker常用命令 1.拉取镜像。 docker pull [image] 2.查看docker当前镜像。 docker image ls 或 docker images 3.新建一个docker容器,并映射端口号。 docker run -d -p [host port]:[docker port] [image] 4.查看运行中的docker容器。 docker ps -a 5.进入一…

使用爱思助手备份苹果手机数据的方法

背景:前段时间刚给对象买的一个紫色的苹果11,128G的那种,最近发现电池电量忽然就少很多,电池除了点问题,去苹果售后店准备换一个电池,还在保修期,区分一下售后店(回厂修十多天)及专卖店(有备用电池)。今天提前备份一下数据,防止数据丢失,一般内存不大可以使用手机…

高级Java教程

课程大纲 学习Java基础很容易。 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员。 网络上充斥着“软”,“便宜”,“低端” Java教程,但是所缺少的实际上是将您带入新的高度的材料。 本课程…

Cool!15个超炫的 CSS3 文本特效【上篇】

每一个网页设计师都希望创建出让用户能够赏识的网站。当然,这是不可能满足每个人的口味的。幸运的是,我们有最强大的工具和资源。实际上,我们非常多的网站模板,框架,内容管理系统,先进的工具和其他的资源可…

cmake 构建路径_新手必备:win10 系统下 VSCode+CMake+Clang+GCC 环境的搭建

打算用C/C把基本的数据结构与算法实现一遍, 为考研做准备, 因为只是想实现算法和数据结构, 就不太想用VisualStudio, 感觉VSCode不错, 遂在网上找了一些教程, 结合自己的需求, 配置一下开发环境。安装软件1、CMakeCMake是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists…

一文带你了解腾讯位置服务的开发与接入

背景:地图是空间信息的图形传递形式,是信息传输工具之一。编图者须充分掌握原始信息,研究制图对象,结合用图要求,合理使用地图语言,将信息准确地传递给用图者。用图者须熟悉地图语言,深入阅读分析地图信息,形成对制图对象正确而深刻的认识。 腾讯位置服务为各类应用厂商…

网络安全单兵工具 -- YAKIT

网络安全单兵工具 -- YAKIT 一、下载及安装 1、原作者及下载地址 https://github.com/yaklang/yakit2、双击下载好的exe文件,点击核心引擎安装与升级 3、点击意见更新Yak引擎 4、以管理员启动 5、点击连接引擎 二、使用方法 1、扫描端口/指纹 2、爆破与未授权 3、专…

Java - 文件(IO流)

Java - 文件 (IO)流的分类:> 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter> 缓冲流:BufferedInputOutStream | BufferedOutputStream | BufferedReader | BufferedWriter> 转换流:InputStreamR…

windows配置samba客户端_如何搭建与Windows客户机结合使用的Samba文件服务器?

据Samba项目网站声称,Samba是一组开源/免费软件套件,它为SMB/CIFS客户机提供了无缝顺畅的文件和打印服务。不像实现SMB/CIFS网络协议的其他系统(比如面向HP-UX的LM Server、面向OS/2的LAN Server或VisionFS),Samba(及其源代码)可以免费获取(最…