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

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
V2EX - 技术
V2EX - 技术
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Security @ Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
Attack and Defense Labs
Attack and Defense Labs
Jina AI
Jina AI
The Last Watchdog
The Last Watchdog
W
WeLiveSecurity
H
Help Net Security
V
Visual Studio Blog
宝玉的分享
宝玉的分享
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threat Research - Cisco Blogs
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Latest news
Latest news
T
Tor Project blog
I
Intezer
美团技术团队
GbyAI
GbyAI
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
Y
Y Combinator Blog
博客园 - 司徒正美
T
Tenable Blog
O
OpenAI News
N
News and Events Feed by Topic
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
Help Net Security
Help Net Security

博客园 - 阿修罗一平

IIS部署WCF出现的各种问题汇总 Infragistics控件的工具栏注册 NUnit的使用中可能遇到的问题 Linq备忘 Nihibernate的重要知识点 Devexpress使用记录 使用List数据集合,利用DevExpress.XtraReports开发Master-Detail报表 PDA访问WCF PDA(WinCE)项目开发中遇到的问题及解决方法总结 Grid控件绑定bindingSource后在新增行时设置Cell的初始值 “BindingSource绑定单个实体对象后在代码中赋值无效和无法显示”的解决方法 sqlservier2005转成sqlserver2000中出现的问题(WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) 项目考虑因素及解决方案(.net) 设计模式在工作中的应用(三) 设计模式在工作中的应用(二) NHibernate示例 Remoting服务集成到IIS的简单总结 关于Remoting服务启动和停止的简单总结 将公司系统从SqlServer 2K移植到Oracle 10g中的简要总结
设计模式在工作中的应用(一)
阿修罗一平 · 2007-10-11 · via 博客园 - 阿修罗一平

    虽然对于设计模式谈不上认识,但我希望能做成一件事,就是从今天开始将工作中应用设计模式所做的设计记录下来,也算是设计模式在应用过程中的总结,暂且不论对错。等到退休的时候,再来看看,将是另一种心情。

    先说说框架的一个工具,当时具体的需求是:需要做一个代码生成工具,可以从sqlserver中获取表结构,生成用于转换为ICE类的实体描述文件。(关于ICE,大家可以上网查查,不管是什么,反正就是要求生成一个特定格式文件)

    功能很简单,就是从sqlserver数据库中获取某个表的结构信息,让后根据表的结构生成项目开发种需要的文件,比如类文件,xml文件等等。做设计的时候,考虑的是对变化的封装。那我们来看看这个小小的工具会存在什么样的变化。第一,系统虽然目前使用的是sqlserver数据库,但需要考虑以后如果用Oracle或者其他数据库,那该如何是好。所以这个工具首先是要支持不同的数据库,保证在数据库变化的同时支持数据库类型的可扩展。 第二,虽然现在只要求生成ICE转换前的类文件,但以后也许还会有根据表结构生成xml描述文件也说不定,利用表结构生成不同的文件太普遍了,既然想到了,就需要支持生成不同的类型文件的扩展。不管以后怎么样,还是得留一些余地啊。暂时只想到了这两方面的变化,其他的没想到,以后再说吧。

    设计思路:这个工具目前考虑到的有两方面的变化,一个是数据库,另一个是不同类型文件。
    什么都不想,拍拍脑袋,最先使用肯定是类继承。可如果使用类的继承,那一旦数据库改为Oracle、MySql数据库,或者需要生成其他格式的文件,那么就要增加很多类,越往后,增加的越多,类就要泛滥了。简图:
   

    考虑了一下,于是选择了bridge模式。为什么?支持多唯变化,能够支持不同数据库和不同类型文件的改变。同时,为了能够使用统一格式的数据集,方便FileCreator按照统一的方式读取表结构信息,在FileCreator类中调用DataBase类型对象获取表结构数据集时统一转换为固定格式的表结构信息格式。(当然,实现统一格式方法很多,也可从数据库这级做文章。)通过这样的设计,如果数据库变了或者新增了一种文件格式,只需要新增一个数据库对应的类或者一个文件格式类,其他不用做任何改动。比上面的设计清爽多了。
        
    简图如下:

 
    好了,下次继续。