我正在建立一个管理寄宿学校学生的系统,以取代不必要的大量文书工作。作为其中的一部分,一些学生不是寄宿生,因此每天离开学校回家。文书工作系统每天打印出一份非寄宿学生名单,学生在离开时自行检查。
我使用Meteor复制了这个系统,但是我相信我的系统存在根本缺陷,至少它非常容易出错。我创建了一个'门票数据库。每张票都记录了特定日期内特定非寄宿学生的历史。为了初始化票证,服务器使用cron作业每天午夜执行以下功能。
function insertDailies() {
console.log("Daily Tickets Generated")
var dailyStudents = Meteor.users.find({"profile.daily": true}); //Insert all daily students
dailyStudents.forEach(function(dailyStudent) {
Dailies.update({ //Dailies is a collection of these tickets
student: dailyStudent,
date: today().toDate() //Using moment.js
}, {
$setOnInsert: {
student: dailyStudent,
date: today().toDate(),
left: false,
dinner: false,
stayLate: false,
sleep: false,
room: null
}
}, {
upsert: true
});
});
}
其中left
,dinner
,stayLate
和sleep
是每个学生可以拥有的四种非互斥状态。
目前的系统是可以接受的,只是它容易出错并且不可靠 - 在某些情况下,系统会为每个学生生成两张票。在UTC以外的时区午夜之后不久访问系统时,门票偶尔会无法显示。许多其他与时间相关的错误似乎是由系统与日期联系造成的。
是否有更好的,更具抗虫性的方法来每天跟踪每个学生的状态?即使我用其他东西替换当前系统,时间依赖性(而不是像大多数其他动作那样的事件驱动依赖)会强制不可靠性继续吗?