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

推荐订阅源

I
Intezer
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cybersecurity and Infrastructure Security Agency CISA
N
News | PayPal Newsroom
T
Tenable Blog
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
P
Privacy International News Feed
IT之家
IT之家
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
博客园_首页
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
NISL@THU
NISL@THU
I
InfoQ
D
DataBreaches.Net
有赞技术团队
有赞技术团队
K
Kaspersky official blog
Security Latest
Security Latest
The Register - Security
The Register - Security
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
P
Proofpoint News Feed
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic

博客园 - 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对象里面查找这个属性,然后替换这个值.

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