篇文章的部分灵感来

现在,这是一个不错的功能。几年前我在 Scala 中使用过它,其他语言也有,所以在 Java 中引入它似乎很容易。

但是,句法糖(请不要争论这是否正是句法糖)可能会出现问题并导致“句法糖尿病”。它有两个可能的问题。

不太重要的是一致性——如果你可以用多种同样有效的方式做一件事,这会在代码中引入不一致和“正确的做事方式”的毫无意义的论据。在这种情况下——对于 2 行字符串,您是否使用文本块?您是否应该对简单字符串进行多行格式化?您是否应该配置 checkstyle 规则以拒绝一个或另一个选项以及在什么情况下?

第二个也是更大的问题是代码的可读性。我知道这听起来违反直觉,但请耐心等待。Vlad 给出的例子说明了——你想在你的 Java 代码中有一个 20 行的 SQL 查询吗?我会说不——你最好将它提取到一个单独的文件中,并使用某种形式的模板,填充正确的值。当您浏览代码时,这肯定是可读的:

https://www.xiaohongshu.com/discovery/item/6331cfa800000000170174e5

1
2
3
4
5
String query = QueryUtils.loadQuery("age-query.sql", timestamp, diff, other);
// or
String query = QueryUtils.loadQuery("age-query.sql",
       Arrays.asList("param1Name", "param2Name"),
      Arrays.asList(param1Value, param2Value);

查询可以放在 /src/main/resources 中,并由QueryUtils而且由于之前缺少文本块,您不会喜欢在代码中使用丑陋的字符串连接查询。

https://www.xiaohongshu.com/discovery/item/6346fefd000000000601c9c2

但是现在,有了这个功能,你很想这样做,因为,好吧,它看起来不错。Elasticsearch 查询、JSON 模板等等也是如此。有了这种“糖”,您就有更多的动力将它们放入代码中,可以说,它们会使代码的可读性降低。如果您确实必须调试查询,而不是通过名称来假设其语义并依赖于正确的实现,您可以轻松地age-query.sql使用它。就像您提取具有一些实现细节的私有方法一样,它使调用方法更具可读性和易于遵循。

仅提供幻灯片)中对此进行了总结。Scala 允许您以多种方式很好地表达事物,这在某些情况下会导致不一致和糟糕的代码可读性。

与直觉相反,有时语法改进可能会降低代码的可读性。因为它们引入了复杂性,并且因为它们使做错事变得更容易。

List<String> list = new ArrayList<String>()这不是一个普遍的抱怨,当然需要语法糖——如果你可以使用菱形运算符,你就不必写了。但是每个这样的特性都应该被深思熟虑,不仅要考虑编写代码的容易程度,还要考虑阅读代码的容易程度,更重要的是——它激励了哪种类型的代码

在分发捆绑软件时,您有多种选择,但如果我们排除 Docker 和 Kubernetes 等花哨的新手,您将有以下选择:安装程序(适用于 Windows)、相应发行版的软件包(rpm 或 deb)、tarball使用创建必要配置的设置 shell 脚本和虚拟机(或虚拟设备)。

所有这些选项都适用于不同的场景,但分发准备部署的虚拟机映像被认为是企业软件的标准。你的机器有它需要的所有依赖项(因为它可能不允许连接到互联网),它只需要被启动

https://www.xiaohongshu.com/discovery/item/634d0ab5000000000602a474

但通常您需要一些初始配置,或者至少能够向用户展示如何连接到您的(通常是基于 Web 的)应用程序。因此,创建启动屏幕是许多公司选择做的事情。以下是在 CentOS 上执行此操作的简单方法,这是我的首选发行版。(关于这个主题还有其他资源,例它依赖于 /etc/inittab,它在 CentOS 8 中已被弃用)。

1
2
3
4
5
6
7
8
9
useradd startup -m
yum -y install dialog
 
sed -i -- "s/-o '-p -- \\u' --noclear/--autologin startup --noclear/g" /usr/lib/systemd/system/getty@.service
 
chmod +x /install/startup.sh
echo "exec /install/startup.sh" >> /home/startup/.bashrc
 
systemctl daemon-reload

使用上面的代码,您将创建一个启动用户并在常规登录提示之前自动登录该用户。像在 getty@.service 中那样替换 Exec 就是这样做的。

然后脚本将启动 bash 脚本的调用添加到 .bashrc 中,该脚本在用户登录时运行。该脚本的作用完全取决于您,下面是使用对话框命令的简单演示(我们刚刚在上面安装):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
# Based
 
HEIGHT=15
WIDTH=70
CHOICE_HEIGHT=4
BACKTITLE="Your Company"
TITLE="Your Product setp"
BIND_IP=`ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'`
INFO="Welcome to MyProduct.\n\n\nWeb 
 
CHOICE=$(dialog --clear \
                --backtitle "$BACKTITLE" \
                --title "$TITLE" \
                --msgbox "$INFO" \
                $HEIGHT $WIDTH \
                2>&1 >/dev/tty)
 
clear
echo 'Enter password for user "root":'
su root

此对话框仅显示一些基本信息,但您可以扩展它以允许用户做出选择并输入一些参数。更重要的是,它获取当前 IP 地址并将其显示给用户。这不是他们不能以其他方式自己做的事情,但这样表现出来会更友好。而且您不能对其进行硬编码,因为在每次安装中它都会有一个不同的 IP(即使不使用 DHCP,您也应该让用户设置他们分配的静态 IP,而不是强加给他们)。在脚本结束时,它切换到 root 用户。

这里必须考虑安全性——不应允许您的启动用户在系统中做任何有意义的事情,因为它会自动登录而无需密码决了该问题(例如,当您输入错误的root密码时,您将返回startup.sh脚本而不是控制台)。

我同意这是一个罕见的用例,但我想我会分享这种“神秘”的知识。

原文地址:http://www.cnblogs.com/kslove/p/16799587.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性