language-agnostic - 构建不以文件为中心的系统

标签 language-agnostic automation build-automation

我们有一个软件基础设施,其工作方式与软件构建系统非常相似:从不同来源收集信息并用于生成一些输出。就像在传统的软件构建中一样,我们有不同类型的输出、依赖树等。

主要区别在于我们的源、中间结果和输出本质上并不是基于文件的。相反,它们是(唯一可寻址的)数据对象。

现在,我们正在结合传统的构建系统(SCons)将数据结构映射到文件和目录,但这无法扩展,无论是w.r.t还是。性能,但(更重要的是)w.r.t.可维护性。因此,我正在寻找一个专门为此目的而构建的基础设施。

作为说明,假设您有 3 个 XML 文档 ABC。假设 B/foo/bar 是根据 A/x/yA/x/z 计算的,类似地 C/a/bA/x/y 计算得出。我需要一个基础设施来

  1. 实现这些关系(即转换及其依赖关系)
  2. 更改后自动重新构建相关部分

使用文件的一个主要问题是,如果我将 ABC 映射到某些文件 A.xml B.xmlC.xml 并使用传统的构建系统,然后任意更改为 A.xml 将触发 B.xmlC.xml 的重建,即使 A/x/yA/x/z(B 的原始依赖项)未修改。因此,为了实现细粒度的依赖关系解析,我需要将 ABC 映射到目录,而不是文件其中每个子目录代表一个元素,文件代表属性等。正如我所说,这对我们来说是无法扩展的。

(请注意,我们的系统实际上并不是基于 XML)

现在,我正在寻找任何指向这个方向的现有软件、基础设施或概念,无论实现语言和底层数据结构如何。

最佳答案

听起来您需要一个事件对象数据库管理系统( ODBMS ),例如 GemStone/S 。 ODBMS 提供传统的持久性服务,无需将数据结构映射到文件的旧成本,也没有众所周知的对象技术优势。正如您所提到的依赖树和可寻址对象,在 ODBMS 中,导航引用作为其数据的一部分存储,允许表示/访问对象之间的任何复杂交互模式。当您预测一个使用继承、对象嵌套和交叉引用的系统时尤其如此。

尽管对象引擎对于您的要求来说可能显得过大,但大规模生产业务系统在并发和多用户环境中使用 OODBM 存储和执行方法是很常见的。它不是免费的,因为你必须投资于人的部分(教育和经验),但一旦克服了最初的恐惧,它就会带来投资返回。

要在更改(来自播音员的通知)后重新构建(订阅)零件,您可以使用 Observer design pattern或其变体之一( SASEAnnouncements framework ),以实现您的公告/订阅架构。正如您已经注意到的,在这种类型的事件框架下,存在一些难以用传统的基于文件的解决方案解决的固有问题。例如,依赖机制通常用于管理对象(或者在您的示例中是 XML 文档)被另一个对象的替换。任何现代事件框架都应该在删除对象时进行管理,插入旧对象的所有依赖项都将更新为新引用。

最后还有一个免费的GemStone/S stack其中包括对象依赖框架,因此您可以尝试真实的对象数据库。

关于language-agnostic - 构建不以文件为中心的系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15500984/

相关文章:

language-agnostic - 阅读他人代码所需的技术或基本技能

language-agnostic - 如何自动检测服务器?

python - Pywinauto 控制媒体播放器

python-2.7 - Opencv Python 2.7 中的轮廓检测

ios - 如何使用 Frank ios 传递带有撇号的辅助功能标签?

maven - 如何使用 Jenkins 并行运行我的集成测试?

cmake - 在 CMake 中,是否可以构建从构建树导入的依赖项?

language-agnostic - 什么是整数溢出错误?

language-agnostic - 如何设计可扩展的软件(插件架构)?

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?