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

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - sinlight23

Web开发框架趋势 ASP.NET MVC - PageData的应用 ASP.NET拾遗 - Health Monitoring .NET Xml序列化时会忽略值为"默认值"的Property或Field ASP.NET MVC 实现模式 - ModelBuilder Enumerable.Range和自定义的IntRange/DateRange HOWTO: Web Deploy时服务器报登录失败的解决方法 HOWTO: 为GitHub for Windows指定代理服务器 ASP.NET MVC - 在MVC 3项目中使用ASP.NET Bundling and Minification机制 脚印:关于错误编码的管理的一些思考 脚印:软件开发随想录 脚印:关于扩展方法的使用 脚印:记录一次重构,将规则生产和规则消费(执行委托)分离 HOWTO: IE8下处理iframe自适应高度 Microsoft ASP.NET 2.0 AJAX 相关信息备忘 MVC 模式在javascript中的应用 VS2010 "SQL Server 2005 Database Project" 使用笔记(二) VS2010 "SQL Server 2005 Database Project" 使用笔记 腳印: 初學者的心態
脚印:一次重构讨论
sinlight23 · 2012-03-11 · via 博客园 - sinlight23

休息的时候趴在同事旁边, 看他写代码. 

为了对某些方法注入相同的处理逻辑, 他选择在方法上增加Attribute的方式,

但是对于一些Web Service代理类的方法, 则是采用另外一种方式:将方法名放到配置文件中。

两者皆是通过某第三方框架完成实际的注入.

他的考虑是代理类是工具自动生成的, 依赖于外部变化, 所以没有采用在代理类中为方法加上Attribute的做法. 

这点很对. 但是当外部变化发生时, 手工维护那么多配置项会是件低效易错的事. 

于是我们讨论了改进的方法: 

1) 利用Visual Studio的自动从类中提取接口的功能, 为代理类生成对应的接口. 

2) 原本使用代理类的地方替换为接口. 

3) 在接口中需要注入处理的方法上增加Attribute.

这个方法的思想没有特殊之处, "语言的强类型特征+强大的编译器+现代的集成开发工具", 减少人为犯错的机率, 尽量在编译期而不是运行期就能发现大多数问题.  

另外一个好处, 当代理类重新被生成时, 编译器可以帮助发现一些兼容问题, 特别是在某个方法没有在所属组件中直接使用, 并且原先不是通过组件引用的方式被其他组件使用的情况下. 

2011年07月06日 22:11 | 标签: #编程点滴 #csharp