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

推荐订阅源

爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Y
Y Combinator Blog
I
InfoQ
美团技术团队
罗磊的独立博客
B
Blog RSS Feed
GbyAI
GbyAI
小众软件
小众软件
IT之家
IT之家
Engineering at Meta
Engineering at Meta
Blog — PlanetScale
Blog — PlanetScale
V
V2EX
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
MyScale Blog
MyScale Blog
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss

博客园 - Jason Cui

求助:SQL Server 2005数据库修复后无法收缩 Django:更简单的实现记住密码功能 用Bugols管理自己的项目 请教:为何Asp.net网站会自己弹出用户名密码输入框? 中文在线Bug管理系统 为什么要创建“理财易”? 继续招聘,请个好用的人可真难啊。 招聘两个Asp.net程序员 记账理财网站列表,用户自己挑一个用吧 坚持,究竟有多难? 又改了一次Django的源代码 请教,关于跨站提交的问题,和网站恶意抓取的防止 诚聘:Asp.net高级技术人员两名 修改了一下Django的源码 幸亏没有选择Ruby On Rails 关于委托的一次实践 Django运行环境配置 Django学习笔记 Python下的Lucene,PyLucene
请教一个有关反射和缓存的高难度问题
Jason Cui · 2006-12-21 · via 博客园 - Jason Cui

目前在程序中使用了NHibernate作为ORM方案,为了网站前台的灵活性,想采用这样一种模板处理技术:

页面模板使用HTML模板,美工可以在页面里加入一些固定的参数,比如{ShowNewArticleList,1},这样这里就会显示分类ID为1的最新文章列表,这样就要求先解析模板,找到所有类似格式的字符串,拿到里面的函数名,然后用反射调用这个函数.

都知道反射可能会带来比较大的性能损失,那么我想如果能够将反射这一步跳过,性能上应该不会太大问题吧.比如根据Command模式,将这些方法都写成单独的类,继承自ShowAction,包含唯一的方法,Show.每一次解析到一个字符串的时候,到一个Hashtable里去查看是否包含了这个字符串的键,如果包含了,就把对应的值转换成ShowAction类,然后调用它的Show方法,如果没有包含,就生成一次,然后加入到这个Hashtable中去.

我能想到的方法就是这样了,不知道是否会有什么问题,或者有什么更好的缓存方案?

另一个更高难度的问题是,我想让用户自己定义要显示的字段,比如这个ArticleList,他可以控制里面的格式显示文章标题,发表时间,或者用户名,或者摘要,或者点击数,回复数等等,如果拿出里面的模板文件,把所有的Article包含的属性都查找替换一遍的话,也太浪费了.因为一个Article可能包含30几个可用字段,而这里只用到其中两三个.所以我想同样采用上面这个方式:

给Article类添加父类Entity,在拿到ShowNewArticleList所指定的模板文件以后,先在模板里面找字符串定义,比如Article.Title,然后根据这个字符串,使用反射,在Load出来的Article对象里面查找这个属性,然后替换这个值.

如果这一步不能缓存的话,我想它的效率不会比替换所有可能的字符串更高,但是通过反射得到的同一个类不同对象的字段属性以及取该字段属性的调用方法,如何缓存呢?我还没有想到任何解决方案.