我已经构建了一个使用静态站点生成器nanoc编写大学课程的工具。Nanoc 是一个不错的基于 Ruby 的包,它作为 gem 分发。
我安装了 gem,并使用“nanoc new”命令创建了基本的目录结构。在那个目录结构中,我编写了一些自定义的 ruby 代码,以及大量的 markdown 文件来定义我的第一门课程。这是已建成的课程。
我上面在 git 中显示的代码对应于该工作的结果,即 nanoc + 我的自定义。还必须运行一个捆绑程序文件才能引入我的其他宝石。
我们将单个课程称为“cosi235a.course”,并将我的工具称为“nanoc-course”。我称 cosi235a.course 的作者为“作者”,我称“nanoc-course”的维护者为“我”。
我正在寻求帮助的是一个很好的设计,可以将 nanoc-course 与 cosi235a.course 分离。换句话说,我想将我定制的基于 nanoc 的工具与一门课程的内容分开。
这样,如果我想为第二门课程设计课程,我可以创建该课程,并且仍然可以对公共代码进行更新。不仅如此,另一位作者可以在他们的网站上创建一个新课程,并为自己使用 nanoc-course,并从我对该工具所做的更新中受益。
我一直在思考这个设计问题,但我没有找到我喜欢的想法。到目前为止,这些想法是半生不熟的:
使 Git 上的 nanoc-courses 包含除所有 Markdown、HTML 和其他内容文件之外的所有内容。根据 nanoc,它们恰好都存在于名为 ./content 的子目录中。Git 上的目录是空的。添加一些 Rake 任务以创建符号链接到包含 cosi235a.course 文件的单独目录。通过这种方式,作者可以处理他们的内容文件,并随时对 nanoc-course 的任何更新进行 git pull。这是一个干净的分离,但很笨重。
使 nanoc 课程成为与 nanoc 一起使用的宝石。换句话说,作者安装 nanoc,执行 nanoc-course 的 gem install(或 bundler install),并在 nanoc 的库中添加一两行以合并逻辑。这种分离不太完整,需要作者(不一定是 Ruby 程序员)修改代码。对于 nanoc 的变化,它也很脆弱。
你有什么想法?