2014-07-16 1 views
0

무엇이 적절한 패턴입니까? 가장 바깥 쪽 함수 (연결이 실패한 경우 로깅 & 중단)에서 Using 문에서 데이터베이스 연결을 얻고 싶습니다. (또는 정말로 그 질문입니까?)하지만 깊이 중첩 된 가장 안쪽 함수에서이 연결을 사용합니다. 주어진 디렉터리에있는 모든 .csv 파일을 데이터베이스로 가져 와서 processthisline()에서 사용자 정의 슬라이스 & 다이 싱을 수행하려고합니다.가장 바깥 쪽에서 db 연결과 같은 리소스 사용 깊게 중첩 된 가장 안쪽 함수의 문 사용?

try/catch/finally 메서드를 호출하면 db가 클래스 속성에 저장됩니다. 어쩌면 다른 패턴이 나에게 발생하지 않았을까요?

public sub methodthatwillbecalled 
    using db       <--obtain connection 
    processallfiles() 
    end using 

private sub processallfiles 
    for each file in source directory 
    processthisfile() 

private sub processthisfile 
    for each line in file 
    processthisline() 

private sub processthisline 
    split on commas and INSERT to db <--perform work on connection, many, many times 
+0

매개 변수로 함수에 전달할 수 있습니다. – Styxxy

답변

1

db 개체를 매개 변수로 전달하거나 클래스 속성을 설정하는 것이 좋습니다.

클래스 속성을 설정하면 종료 할 때마다 연결을 닫으므로 안전함을 "사용하는"것이 안전합니다.

DB 개체를 매개 변수로 전달하면 연결이 각 삽입에 대해 열린 상태로 유지되며 문제가 발생할 경우 연결을 올바르게 닫아야합니다.

다른 하위에 연결을 넣지 않으려면 연결을 놓은 위치에 따라 각 파일이나 줄마다 열고 닫을 수 있습니다.

+0

Using 블록 안에 클래스 prop를 설정하고 (Using 블록을 떠나기 직전에 클래스 prop를 Nothing으로 설정) 잘 동작합니다. 나는 비록 내가 왜 내 손가락을 댈 수는 없지만, 조금은 사기 스럽다고 느낀다. – amonroejj

관련 문제