惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
V
Visual Studio Blog
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
B
Blog
I
InfoQ
博客园 - 三生石上(FineUI控件)
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
H
Help Net Security
博客园 - Franky
宝玉的分享
宝玉的分享
博客园 - 司徒正美
C
Check Point Blog
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家

博客园 - "齐柏林飞艇"迷上了"哥特金属"

我的编程回顾 —— 浅谈怎么快速学习一门新的编程语言 读〖User Stories Applied: For Agile Software Development〗 [reference] reflection in c++ [reference] user story [reference]collada for xna [reference] gpgpu how to load XNA contents at runtime gaussian distribution 最近常去逛的站点 [reference] unmanaged c++ and c# xna tutorials bsp faq LUA+DOTNET(XNA) Using XNA with WinForm Game Development Enters the Scrum (转) linux下代码浏览器cscope GnuNet学习资料汇集 Big companies using Subversion 一个免费的windows 程序installer
FreeMarker在网页游戏服务器开发中的应用
"齐柏林飞艇"迷上了"哥特金属" · 2011-07-10 · via 博客园 - "齐柏林飞艇"迷上了"哥特金属"

1.       FreeMarker是什么

官方网站解释,FreeMarker是一个模板引擎,基于模板生成任何文本输出(HTML到自动生成的源代码)的通用工具。FreeMarker常用于生成网站页面,我们尝试着用于其它场合。

2.       生成战斗录像XML

玩过网页游戏的朋友们,一定知道战斗录像的概念,而战斗录像大部分时候都是一些XML文件(以后会专门讲解战斗录像的其它存储方式,既可以方便地做到格式兼容,又可以减少内存、磁盘和网络带宽占用)

怎么样更好地生成预定义的XML文件呢?

几种我们曾经用过的方式:

a)         拼接字符串到StringBuilder,最后把一个大字符串输出到文件

b)         dom4j生成Element

随着战斗录像表现效果的不断调整,录像文件也需要跟着调整,倘若采用前面两种方式,改起来会麻烦许多。采用FreeMaker之后,录像的格式和录像的数据完全分离,一旦你把数据准备好了,格式随便你改。

3.       生成代码

程序员都是懒惰的,不喜欢敲击重复的代码。我们把这些重复代码的生成交给工具,既可以降低代码的出错率,又可以提高开发效率。很多地方,我们会用到代码生成,例如:服务器RPC代码、策划数据对应的类文件等等。

我们有很多种办法做代码生成,但是FreeMaker是较为方便的。

例如我们通过策划配置的Excel数据生成对应的Java类。

public class ${className} {
<#list properties?keys as prop >
    
private ${properties[prop]} ${prop};
</#list><#list properties?keys as prop >
    
public ${properties[prop]} get${prop?cap_first}(){
        
return ${prop};
    }
    
public void set${prop?cap_first}(${properties[prop]} _${prop}){
        
this.${prop} = _${prop};
    }
</#list>    

然后通过下面的Java处理模板,生成我们需要的代码:

             Template template = config.getTemplate("test.ftl");

            Map<String, Object> variables = new HashMap<String, Object>();
            variables.put(
"className""TestCodeGen");
            Map
<String, String> properties = new HashMap<String, String>();
            properties.put(
"foo1""int");
            properties.put(
"foo2""String");
            variables.put(
"properties", properties);
            template.process(variables, 
new OutputStreamWriter(System.out));

最后的输出

 public class TestCodeGen {

    

private String foo2;
    
private int foo1;public String getFoo2(){
        
return foo2;
    }
    
public void setFoo2(String _foo2){
        
this.foo2 = _foo2;
    }
    
public int getFoo1(){
        
return foo1;
    }
    
public void setFoo1(int _foo1){
        
this.foo1 = _foo1;
    }
}

是不是很容易呢?

4.       总结

FreeMarker是一个好东西,我们要灵活运用它,帮助我们提高开发效率。这里感谢南磊同学翻译了FreeMarker中文指南,为我们提供了便捷。有关FreeMarker的更多内容,请参考FreeMarker指南。