作者qrtt1 (有些事,有時候。。。)
看板java
標題Re: [問題] 讀取常用的 template
時間Tue Feb 4 21:49:17 2020
1F:推 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
=> ...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.132.4 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1580824159.A.E5B.html
2F:推 swallowcc: 好的,感謝指導,確實鑽了牛角尖了 XD 02/04 22:09
3F:→ GGing: 是 redis,原來是自動選字還我以為打錯...= = 02/05 23:00