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

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recent Announcements
Recent Announcements
博客园 - 聂微东
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
U
Unit 42
博客园 - 三生石上(FineUI控件)
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
T
Troy Hunt's Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Schneier on Security
Schneier on Security
AI
AI
T
Tailwind CSS Blog
A
About on SuperTechFans
小众软件
小众软件
云风的 BLOG
云风的 BLOG
Google Online Security Blog
Google Online Security Blog
Forbes - Security
Forbes - Security
WordPress大学
WordPress大学
Martin Fowler
Martin Fowler
Cisco Talos Blog
Cisco Talos Blog
有赞技术团队
有赞技术团队
Recorded Future
Recorded Future
MongoDB | Blog
MongoDB | Blog
B
Blog
The GitHub Blog
The GitHub Blog
IT之家
IT之家
SecWiki News
SecWiki News
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CERT Recently Published Vulnerability Notes
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Know Your Adversary
Know Your Adversary
大猫的无限游戏
大猫的无限游戏
D
Docker
I
Intezer
K
Kaspersky official blog
T
Threat Research - Cisco Blogs
PCI Perspectives
PCI Perspectives
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Vulnerabilities – Threatpost
C
Check Point Blog
The Register - Security
The Register - Security
Scott Helme
Scott Helme
G
GRAHAM CLULEY
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - 阿修罗一平

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类型对象获取表结构数据集时统一转换为固定格式的表结构信息格式。(当然,实现统一格式方法很多,也可从数据库这级做文章。)通过这样的设计,如果数据库变了或者新增了一种文件格式,只需要新增一个数据库对应的类或者一个文件格式类,其他不用做任何改动。比上面的设计清爽多了。
        
    简图如下:

 
    好了,下次继续。