컨트롤러/서비스 스크립트가 없으면 실제로는 단일 책임 원칙을 충족시킬 수 없습니다. 내가 당신이라면 구현할 수있는 고급 설계가 있습니다.
FileRepository
파일을 가져 오는 방법을 폭로해야합니다. 이름은 GetFileById입니다.
MongoDBRepositoryCRUD 연산 방법. 이러한 SelectById, SelectByQuery, 업데이트, 로 는, 이 삭제 만듭니다.
객체 생성 로직
당신의 createNewObj 로직 코드가 그렇게 보이도록이 개체의 생성자로 이동하기에 충분 것이다 간단한 경우 : var newObj = new MyObj(json[i]);
를하지만 상대적으로 복잡 경우 일부를 사용 어쩌면 때문에 검증을 위해 제 3 자 프레임 프레임을 사용하거나 공장을 만드는 것이 좋습니다.
마지막으로 당신이 컨트롤러/서비스 개체를 구현해야합니다 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);
}
}
}
단지 자바 스크립트 구문 의사 코드입니다. 실제 코드는 절대적으로 다르게 보일 수 있지만 어떤 디자인을 가져야하는지에 대한 느낌을줍니다. 또한 나는 내부적으로 DoWork 메쏘드 안에 저장소 객체를 생성하지 않았기 때문에 그들을 삽입하여 의존성 반전 원리를 충족시키는 방법을 생각해 보았다.
희망이 있습니다.
많은 도움을 주셔서 감사합니다. 명확히하기 위해,'newObj' 클래스 내에서 객체를 반환하기 위해 여러 함수를 호출해야 할 필요가 있습니다. 예를 들어, 'function 1'은 JSON 데이터를로드하고,'function 2'는 객체를 준비하며, 'function 3'은 객체의 텍스트에서 일부 태그를 제거합니다. 함수 1이 '함수 2'를 호출하고 '함수 2'가 '함수 3'을 호출하는 것이 좋습니까? 아니면 이것을 위해 별도의 컨트롤러가 필요합니까? – Jascination
그것은이 객체 생성을 제외하고 다른 어느 곳에서나 함수 (1,2,3)를 재사용 할 수 있는지에 달려 있습니다. 그렇다면 그들을위한 특별한 서비스 클래스와 객체 생성 로직을위한 팩토리 클래스를 생성하십시오 ("객체 생성 로직"의 두번째 옵션). 그런 다음 팩토리 클래스에서 새 서비스를 사용할 수 있습니다. –
그건 완벽하게 이해가됩니다. 이렇게 독창적 인 프로그래머로서, 당신이 모르는 것을 실제로 깨닫지 못하는 것은 거의 없습니다. 도움을 감사하십시오. – Jascination