实际上,如果没有控制器/服务脚本,您将无法满足单一职责原则。如果我是你,这是我会实施的高级设计。
FileRepository
应该公开一个获取文件的方法。我们将其命名为GetFileById。
用于 CRUD 操作的MongoDBRepository方法。如SelectById、SelectByQuery、Update、Create、Delete。
对象创建逻辑
如果您的
createNewObj逻辑很简单,那么将其移至对象构造器就足够了,这样您的代码就会如下所示: var newObj = new MyObj(json[i]);
一个工厂。然后你可以这样看:var newObj = MyObjFactory.Create(json[i]);
服务/控制器
最后你需要实现控制器/服务对象。让我们将其命名为WorkService,并使用方法DoWork来处理存储库与上述其他对象之间的所有交互。DoWork 大致如下所示:
function DoWork(fileId){
var json = fileRepository.SelectById(fileId);
for(var i=0;i<json.length;i++){
var newObj = new MyObj(json[i]); // or calling factory method
var dbRecord = MongoDBRepository.SelectByQuery(newObj.name, newObj.date);
if(dbRecord){
MongoDBRepository.Update(newObj);
}
else{
MongoDBRepository.Create(newObj);
}
}
}
请注意,它只是一个 javascript 语法伪代码。您的实际代码可能看起来绝对不同,但它让您感觉应该有什么样的设计。另外我明确没有在DoWork方法中创建存储库对象,考虑注入它们的方法,以便满足依赖倒置原则。
希望能帮助到你!