推 jej: 随便开一个static final的文字存就好啦 02/04 17:52
也可以,只是还是有修改的可能,所以如果可以留点弹性的话还是好一点。
(虽然修改的次数可能少到根本不需要为这种事操心...)
然后会发文另一方面是想问问看,像这种看起来很琐碎的小事大家平常是怎么做的。
其实开发过程中常常会遇到类似这种事情,
感觉像是怎么处理都没差,只要不太夸张的话通常是得过且过。
所以会好奇大家实务上会怎么做。
※ 编辑: swallowcc (175.97.13.81 台湾), 02/04/2020 20:19:31
==============================================================================
不需要为了太小的需求找完整的解法,
你研究的时间比实作这东西的实作超出百倍是不合理,且浪费资源的。
简单的需求,简单实作
static final 不代表只能是程式内的常数,动态读档依然没有问题。
= 范例 = =====================================================================
public class Foo {
public final static String FOO;
static {
try {
// 如果是 web 请改用 classloader
FOO = Files.readString(Paths.get("path/to/template"));
} catch (IOException e) {
throw new RuntimeException((e));
}
}
public static void main(String[] args) {
System.out.println(Foo.FOO);
}
}
======================================================================= 范例 =
这份实作与它的效果
* template 使用档案型式 => 没事不要浪费 DB 资源
* 更新难易程度 => 应该算好吧?文字编辑器修改它,不一定要 RD 也能做
如果放在 DB,接到需求再改好后,还要请 RD 或 DBA 把它更新到 DB 内
如果是 template 档案跟随着应用程式,那就一起进版本控制。
那么 template 修改了,对应的程式也一起修改
比较不会发生 template 与程式对应不上的糗事。
上线后,真的出事,还要想要先程式退版,还是 template 退版
试了 N 试还找不到匹配的版本就有点糗。
* 缺点:不支援执行期更新
=> 你得重新部署 (白话是,换上新版的 .war 或 .jar)
=> 你得重启程式
现有的 类template 处理方式
以 Java 来说,只用标准函式库的情境,最直觉得 template engine
那就是 Resource Bundle 了,也就是用来做 i18n 的那个东西。
但是它要做 ascii code 转换,这修改的方便性不佳
现在 IDE 都支援自动转换,但如果你的 template 要交给非 RD 人员修改
那就不会是个好的方案。
缺点:它的来源是实体的 i18n 档,
如果你的来源不是实体档案,那它就不适用了。
或改用子类别的 PropertyResourceBundle
另外需要处理的原因..
1. 你需要‘热’部署
=> 执行期单独更新 template
2. 同一件事,要做很多次,手刻了很多个 Foo 范例
=> 把责任承担下来,做公用类别
=> 把 Foo 改成通用一点 ?
=> 决定采用 template engine
=> ...