0

我正在重新编写几周前创建的相当复杂的脚本。在向几个人展示之后,他们都同意我应该将它分解成具有特定目的的小块(类),以及SOLID 面向对象的编程原则

作为一名自学成才的程序员,这些概念对我来说是相当新的,我对如何最好地将数据从一个函数/类传输到另一个感到有点困惑。例如,这是我正在构建的简化结构:

在此处输入图像描述

我的问题是:

我是否应该有一个“控制器”脚本来调用所有这些函数/类并在必要时传递数据?这是我for loop要从上图中放置的地方吗,即使它的工作方式与其中一部分Function 1可以调用的效果一样好Function 2

4

1 回答 1

1

实际上,如果没有控制器/服务脚本,您将无法满足单一职责原则。如果我是你,这是我会实施的高级设计。

FileRepository
应该公开一个获取文件的方法。我们将其命名为GetFileById

用于 CRUD 操作的MongoDBRepository方法。SelectByIdSelectByQueryUpdateCreateDelete

对象创建逻辑
如果您的 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方法中创建存储库对象,考虑注入它们的方法,以便满足依赖倒置原则。

希望能帮助到你!

于 2013-06-13T09:22:39.513 回答