2013-12-20 2 views
0

저는 자연 언어 처리 프로젝트 (C#)에서 일하고 있습니다. 여기서 C는 속도를 높이기 위해 문자열 대신 색인을 사용하여 단어를 참조해야합니다. 예를 들어 문장 "i am what i am""0 1 2 0 1"으로 저장해야합니다.동일한 객체를 전달하는 것보다 싱글 톤을 갖는 것이 더 좋습니까?

이 프로젝트에는 이런 식으로 문장을 저장하는 클래스가 많이 있습니다. 이 문제를 해결하기 위해 처음에는 Codebook이라는 싱글 톤 클래스를 구현할 계획이었습니다. 그래서 내 프로젝트의 어느 위치에서나 단어의 문자열을 인덱스로 변환하거나 인덱스로 문자열을 변환해야 할 때마다 말할 필요가 Codebook.Instance.Convert(n) 또는 그런 것입니다.

그러나 여러 가지 다른 용도 (예 : 중국어, 영어, 품사 태그 라벨)에 여러 개의 Codebook을 사용해야하므로 문제가 발생하므로 다른 방법을 생각해 보았습니다. 그것까지. 내 프로젝트 구조의 가장 위에, 나는 Codebook의 인스턴스를 만든 다음, 그것을 모두 전달합니다. 이런 식으로 문장을 처리하는 거의 모든 메소드는 Codebook 매개 변수를 갖습니다. C#에서는 객체를 전달하는 것이 실제 내용이 아닌 참조 형태로 이루어 지므로 Codebook 객체의 모든 모양은 모두 동일한 내용을 참조합니다.

Codebook 개체가 여러 번 전달되는 경우 내 질문에 두 번째 방법으로 문제가 발생합니까? 나는 문자열 자체 대신 색인의 사용이 내 프로젝트에서 집중적이기 때문에 걱정이된다. 나는 싱글 톤 접근법이 내 문제를 다룰 수 있다는 것을 알고 있지만, 말했듯이, 나는 그것을 사용할 수 없다. 그래서 두 번째 접근법이 괜찮 으면, 같은 Codebook 객체가 통과해야하는 긴 메소드 체인이 있습니다.

+0

싱글 톤은 항상 _great_로 시작합니다. 당신이 구할 모든 시간을 생각해보십시오! 문제는 OO 설계에 대한 구조화 된 접근 방식을 우회하고 결국 머리가 매듭에 묶여있게됩니다. 싱글 톤 다이어그램은 어떻게하나요? 그것은 협회입니까, 아니면 구성입니까? – Gusdor

답변

1

일반적으로 생성자를 통해 Depedency injection을 사용하는 것이 좋습니다. 코드북을 생성자에게 전달하면 클래스에서 읽기 전용 참조를 유지할 수 있습니다. 이렇게하면 모든 수업에 적합한 코드 북을 확보 할 수 있습니다. 싱글 톤 접근 방식은 문제를 처리 할 수도 있지만 테스트 및 유지 관리가 더 어려울 것입니다.

public class MyBusiness{ 
    public MyBusiness(Codebook codebook){ 
     Codebook = codebook; 
    } 

    private readonly Codebook Codebook; 

    ... 
} 
0

위에서 언급했듯이 다른 언어로 된 코드 북을 사용해야하므로 싱글 톤을 사용할 수 없습니다. 어쨌든 다른 클래스를 만들고 코드북 목록 (또는 키를 언어로 사용하는 사전을 가져 와서 적절하게 가져올 수 있음)을 속성 중 하나로 사용하고 새 클래스를 싱글 톤으로 만드는 방법에 대해 설명합니다. 이렇게하면 항상 같은 객체를 다시 얻게되지만 코드북 모음을 갖게됩니다.

관련 문제