元数据的理解!!
bug收集:专门解决与收集bug的网站
网址:www.bugshouji.com
今天给大家分享一下“元数据是什么?及其它作用!“
本文内容,来自《程序员修改之道——从小工到专家》
动态配置(目的)
首先,我们想要让我们的系统变得高度可配置。不仅是像屏幕颜色和提示文本这样的事物,而且也包括诸如算法、数据库产品、中间件技术和用户界面风格之类更深层面的选择。这些选择应该作为配置选项、而不是通过集成或工程( engineering )实现。
提示37 Configure , Don ' t Integrate 要配置,不要集成
程序员修炼之道
要用元数据( metadata )描述应用的配置选项:调谐参数、用户偏好( user preference 安装目录,等等。
元数据到底是什么?严格地说(元数据是关于数据的数据最为常见的例子可能是数据库 schema 或数据词典。schema 含有按照名称、存储长度及其他属性、对字段(列)进行描述的数据。你应该能访问和操纵这些信息,就像对数据库中的任何其他数据一样。
如下图:
我们在其最宽泛的意义上使用该术语。元数据是任何对应用进行描述的数据——应用该怎样运行、它应该使用什么资源,等等。在典型情况下,元数据在运行时、而不是编译时被访问和使用。你每时每刻都在使用元数据——至少你的程序是这样。假定你点击某个选项,隐藏你的 Web 浏览器上的工具栏,浏览器将把该偏好作为元数据存储在某种内部数据库中。
这个数据库可以使用私有格式,也可以使用标准机制。在 Windows 下,初始化文件(使用后缀. ini )域系统注册表中的条目都很典型。在 Unix 下, XWindow System 使用 Application Default文件提供类似的功能。Java 使用的是 Property 文件。在所有这些环境中,你通过指定关键字来获取值。另外,更强大和灵活的元数据实现会使用嵌入式脚本语言(详情参见“领域语言43页)。
Netscape 浏览器实际上使用了这两种技术实现偏好。在版本3中,偏好被存为简单的键/值对:
SHOW _ TOOLBAR : False
后来,版本4的偏好看起来更像是 JavaScript :
user _ pref (" custtoolbar . Browser . Navigation _ Toolbar . open ", false );
元数据驱动的应用
但我们不只是想把元数据用于简单的偏好。我们想要尽可能多地通过元数据配置和驱动应用。我们的目标是以声明方式思考(规定要做什么,而不是怎么做),并创建高度灵活和可适应的程序。我们通过采用一条一般准则来做到这一点:为一般情况编写程序,把具体情况放在别处——在编译的代码库之外。
提示38 Put Abstractions in Code , Details in Metadata 将抽象放进代码,细节放进元数据 程序员修炼之道
这种方法有若干好处:
●它迫使你解除你的设计的耦合,从而带来更灵活、可适应性更好的程序。
●它迫使你通过推迟细节处理,创建更健壮、更抽象的设计——完全推迟到程序之外。
●无需重新编译应用,你就可以对其进行定制。你还可以利用这一层面的定制,轻松地绕开正在运行的产品系统中的重大 bug。
●与通用的编程语言的情况相比,可以通过一种大为接近问题领域的方式表示元数据(参见”领域语言”,43页)。
你甚至还可以用相同的应用引擎——但是用不同的元数据——实现若干不同的项目。
苟有恒 , 何必三更眠五更起
相关文章
- 长篇图解java反射机制及其应用场景
- [java并发编程]基于信号量semaphore实现限流器
- java并发编程-StampedLock高性能读写锁
- 【java并发编程】ReentrantLock 可重入读写锁
- 【java并发编程】Lock & Condition 协调同步生产消费
- Java synchronized对象级别与类级别的同步锁
- java并发编程JUC第十二篇:AtomicInteger原子整型
- java并发编程JUC第十一篇:如何在线程之间进行对等数据交换
- java并发编程JUC第十篇:CyclicBarrier线程同步
- java并发编程JUC第九篇:CountDownLatch线程同步
- java并发编程工具类JUC第八篇:ConcurrentHashMap
- java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
- java并发编程工具类JUC第六篇:SynchronousQueue同步队列
- java并发编程工具类JUC第五篇:PriorityBlockingQueue优先级队列
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列
- java并发编程工具类JUC第三篇:DelayQueue延时队列
- java并发编程工具类JUC第二篇:ArrayBlockingQueue
- java并发编程工具类JUC第一篇:BlockingQueue阻塞队列
- 详解线程池的作用及Java中如何使用线程池
- Java9系列第九篇-对HTTP2协议的支持与非阻塞HTTP-API