前缀(prefix)的目的是给组件或者全局逻辑结构(global logical construct)的定义的物理位置(physical location)提供一个分层的标识(hierarchical identification)。设计良好、功能内聚的包的包前缀提供了语义和物理信息。不应该仅仅关注前缀标识的语义属性,前缀更主要的目标是强迫拥有相似前缀逻辑上内聚的功能被打包到同一个库中。

理想情况下,一个包前缀不仅表示了定义组件和类的物理库, 还暗含着内聚的逻辑特征和组织特征。

有时候我们很想把逻辑上相关的单元分布到多个物理库中,并给这些逻辑单元使用共同的包前缀。举个例子,有一个包(pub)提供一组底层,可重用的容器类型。这个包中的每一个组件和每一个类型都以前缀pub_开头。现在假设我们开发我们自己的应用程序包(xr2e),并且发现我们需要一个新的类型,Btree,碰巧这个新类型和pub包中的类型的特征相似(底层,容器,可重用)。我们该怎么办?

我们可能会给这个组件取名pub_btree并且把它放到我们自己的库以表明它和pub包的逻辑关系。这种做法不好。给定一个包前缀的所有组件处于同一个物理库中,对于理解和管理大型系统来说非常宝贵,一定不能牺牲掉。

我们还有两个可行的替代方案,都有各自的优点:

  1. 取名叫xr2e_Btree并放到我们自己的包中。
  2. 取名叫pub_Btree并放到pub包中。

可能给这个类取名为xr2e_Btree,并把它定义为我们自己的包中的一个组件是最简单的。局部的实现这个对象减少了重用的可能性,这是好事也是坏事。把Btree定义在同一个包中,我们保留了所有权,因此不用操心它的变化或者加强(这如果能满足我们的需求的话)。

可重用性并不总是从一开始就那么明显。我们觉得其他人并不需要Btree类型,所以我们就自己写自己用。如果其他人也是这种想法,而btree事实上却是是可重用的,我们可能会突然发现在我们的系统中出现了若干个Btree的冗余版本。如果我们看到三个或者更多的btree组件的相似版本出现在我们的系统中,那这个组件就是一个重用的候选者。此时,我们应该评估一下,通过把一个单一的,统一的版本的Btree移到公用的pub包中(并把前缀改为pub_),能对巩固我们的系统带来多大的好处。

经常我们觉得一个组件是可重用的,而最后却发现其他人并不需要这个组件。把这样一个重负放到高度可重用的包中比推迟把可重用组件放到pub包更糟糕。让更多的功能公共化比让更少的功能公共化更简单。如果有疑问,最好是推迟把一个组件加入到一个广泛使用的包中,除非有证据证明这个组件的重用性。

Preserving Prefix Integrity相关推荐

  1. 用java写的教职工信息管理系统_基于Java的教师信息管理系统的设计与实现论文.doc...

    基于Java的教师信息管理系统的设计与实现论文 职场大变样社区():下载毕业设计成品 全套资料,全部50元以下 毕业设计(论文)任务书 第1页 毕业设计(论文)题目: 基于java的教师信息管理系统的 ...

  2. SQL Server中的递归CTE和外键引用

    介绍 (Introduction) Foreign key constraints are a powerful mechanism for preserving referential integr ...

  3. 英文ppt结尾欢迎您的意见_不受欢迎的意见,您需要大型的前期设计

    英文ppt结尾欢迎您的意见 您需要大型的前期设计(You need a big upfront design) You've probably heard that creating extensiv ...

  4. struts2+spring3+hibernate4

    //web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=" ...

  5. oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found

    当我们删除 数据的时候 oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found 这种情况呢是因为 ...

  6. usaco ★Longest Prefix 最长前缀

    ★Longest Prefix 最长前缀 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列 28 分解成较短的(称之为元素的)序列很感兴趣. 如果一个集合 P 中 ...

  7. Using unique option prefix myisam-recover instead of myisam-recover-option

    [转载]关于mysql error.log报"Using unique option prefix myisam-recover instead of myisam-recover-opti ...

  8. Valve className=org.apache.catalina.valves.AccessLogValve directory=logs prefix=localhost_acce

    在tomcat/conf/server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.Acce ...

  9. 开源中国iOS客户端学习——(一)Prefix.pch文件

    2019独角兽企业重金招聘Python工程师标准>>> 当我们新建一个工程的时候,在Supporting FIles文件下会看到一个以  -Prefix.pch结尾文件的文件,pch ...

最新文章

  1. hibernate tools for eclipse plugins在线怎么安装
  2. 北京加强数据中心节能审查,2030年100%利用可再生能源
  3. 广药谋定中国农民丰收节交易会-万祥军:谋定乡村振兴基金
  4. linux创建永不过期用户,linux下如何设置用户密码永不过期_网站服务器运行维护...
  5. java达达租车接口_Java第一个项目——达达租车系统v1
  6. jdk8 list转Map
  7. CString转化问题
  8. 解决sql脚本文件太大无法打开的问题
  9. 1.11 超过人的表现
  10. c语言非标准输出电源适配器,五分钟了解设计模式(3)---适配器模式
  11. Scratch3架构结构说明
  12. MacOS Ventura 13.0 Beta4 (22A5311f) 带 OC 0.8.3 / Cl 5148 / PE 三分区原版黑苹果镜像
  13. java编程指南100本电子书
  14. android 添加字幕,字幕添加器app-字幕添加器安卓版v2.0.1 - 起点软件园
  15. MAC常用java开发软件
  16. linux系统的ftp命令大全,Linux-FTP命令大全(完整版)
  17. 「文档编写」- 常见序号写法 @20210412
  18. phpadmin安装到mysql中_PHPAdmin的安装和配置
  19. 数学建模竞赛在中国的蝗虫式增长
  20. 百度广告屏蔽及游戏推广屏蔽

热门文章

  1. 冷库用电量计算机方式,冷库一般用电量如何估算
  2. 微信支付网页授权域名只能填1个,怎么破,教你一招搞定
  3. 可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用
  4. java web编程技术解题与实验指导_javaweb编程技术实验指导书
  5. TA100 T3.4
  6. 从零学前端第十七讲:小程序开发
  7. bugkuctf 游戏通关玄学式速通
  8. 在CentOS 7配置IPv6 DNS Server
  9. 不用露脸,现在做自媒体还晚不晚?推荐这3个新手适合做的领域
  10. 关于C语言函数的简单理解