2012-12-15 4 views
1

도메인 개체를 사전의 키로 사용하는 것이 좋습니다.사전에서 키로 개체 사용

NHibernate을 사용하여 내 도메인 개체를 채우는 시나리오가 있습니다.

비즈니스 논리를 수행 할 때 사전을 찾아야합니다. 나는 두 번째 옵션은 내가 쉽게 테스트 케이스를 작성할 수와의 실제 도메인 개체를 사용할 수 있습니다

  1. 로 나에게 더 나은 것 같다 의 사용을 어느

    IDictionary<int, ValueFortheObject> 
    

    또는

    Dictionary<DomainObject, ValueFortheObject> 
    

    을 만들 수 있습니다 첫 번째 옵션을 사용하면 Mock<DomainObject>을 사용하는 것보다는 테스트 케이스를 사용하는 것이 좋습니다. Id에있는 setter는 모든 도메인 객체에서 private입니다. Dictionary<Hobbit,List<Adventures>> 댓글이

    내 질문에

을 매개 변수로 전달할 때 INT는 특히 hobbitId을 알리는와 Dictionary<int,List<Adventures>>보다 나에게 더 읽을로

  • 가 코드를 읽기 것은 다음과 같습니다

    1. 초당 첫 번째 옵션을 사용하면 어떤 이점이 있습니까?

    2. 두 번째 방법을 사용하면 성능 문제가 발생합니까?

    업데이트 01 :

    내 도메인 모델들을 구현하고 작업을 수행하는 동안 그들은 돌연변이하지 않습니다.

    성능을 키로 사용하는 데 문제가 있습니까? 또는 나는 완전히 여기에서 요점을 놓치고 성능/메모리는 어떤 키가 사용되는 것과 관련이 없습니까?

    업데이트 02 :

    내 질문

    내가 대신 원시 형의 키와 왜/어떻게 같은 개체를 사용하는 경우
    1. 은 성능이나 메모리에 문제가있을 것인가?
  • +0

    사전에 익숙합니까? 그것은 키/값 쌍을 사용합니다 .. 또한 중복 키를 허용해서는 안됩니다. 예를 들어 Hashtable에 대해 생각해 보셨습니까? Dictionary > 더 읽기 쉽지만 실제 코드를 보지 않아도 무엇인지 판단하기가 어렵습니다. 당신은 정확하게 내 생각에 노력하고 있습니다 – MethodMan

    +0

    사전을 어떻게 구체적으로 사용하고 싶습니까? – CSharpie

    +0

    다른 방법의 인덱스를 사용하여 배열에서 발생을 계산하는 빠르고 더러운 방법을 사용했습니다. – aremvee

    답변

    1

    @ScottChamberlain은 전반적인 문제를 제시하지만 사용 사례는 어느 쪽이든 변론 할 수 있습니다. 자신에게 물어야 할 몇 가지 질문은 다음과 같습니다. 두 비즈니스 객체가 동일하다는 것은 무엇을 의미합니까? 사전에서 키로 사용되거나 다른 곳에서 비교할 때 동일하거나 다른가요? 개체를 변경 한 경우 키 변경으로 가치가 있거나 동일하게 유지해야합니까? GetHashCode()Equals()에 대한 재정의를 사용하는 경우 해당 기능을 계산하는 비용은 얼마입니까?

    일반적으로 개체 평등과 관련하여 오해의 여지가 많기 때문에 키에 간단한 유형을 사용하는 것이 유리합니다. 가독성이 가장 큰 관심사 인 경우 적절한 방법으로 사용자 지정 사전 (Dictionary<Key,Value> 주위의 래퍼)을 만들 수 있습니다. 그런 다음 객체를 기준으로 메소드를 작성한 다음 내부적으로 원하는 키를 원하는대로 사용하십시오.

    +0

    다른 문제는 비즈니스 로직을 테스트하는 것입니다. 도메인 객체를 사용하면 간단한 테스트 케이스를 작성할 수 있습니다. +1 내 문제를 해결할 dictonary 주위에 래퍼를 사용하여 제안 :) – frictionlesspulley

    4

    키가되는 롤을 수행하는 동안 키 객체를 변경하면 안됩니다.

    "mutate"라고 말하면 키 객체가 EqualsGetHashCode을 사전에 대한 키로 사용해야한다는 의미입니다. 키로 사용되는 동안 개체에 수행하는 작업은 GetHashCode의 값을 변경하거나 Equals을 컬렉션의 다른 키와 함께 true로 평가해서는 안됩니다.

    +0

    예, 도메인 모델은이를 구현하고 조작을 수행하는 동안 돌연변이가 발생하지 않습니다. 그것들을 키로 사용하여 성능에 문제가 있습니까? 또는 나는 완전히 여기에서 요점을 놓치고 성능/메모리는 키가 사용되는 것과 관련하여 많은 차이를 만들지 않는가? – frictionlesspulley

    관련 문제