현재 PC에 연결된 장치에서 구성 값을 읽고 설정할 수있는 라이브러리 작업 중입니다. 각 구성 필드는 상수 (public static readonly
) 개체로 설명되며이 개체의 이름, 데이터 형식 (값 제한 포함) 및 해당 필드를 읽거나 쓰는 데 필요한 명령 시퀀스가 들어 있습니다.물건을 (내부적으로) 설명하고 공개적으로 식별하기 위해 별도의 물건을 사용해야합니까?
이 정보는 주로 라이브러리 내부에서만 필요합니다. 그러나 클라이언트 코드는 특정 필드를 읽고 쓸 수 있도록 라이브러리에 알릴 수 있어야하며 필드와 값을 연결하는 사전에서 구성 값 컬렉션을 전달하려고합니다. 이렇게하려면 필드를 식별하는 공개 값을 제공해야합니다.
필드를 내부적으로 설명하고 공개적으로 식별하기 위해 동일한 개체를 사용해도 괜찮습니까? 약간 틀린 느낌이 들지만, 나는 그 이유에 손가락을 대지 못합니다. 나는 당신이 쉬는 것에 대한 나의 의구심을 갖게하거나, 그것이 왜 나쁜 생각인지 또는 무엇을주의해야 하는지를 말해 줄 수 있기를 바랍니다.
업데이트 : 필자는 필드 ID와 필드 액세스 구현에 동일한 개체를 사용했습니다. 이제 몇 달 후, 필자는 왜 이것이 아주 깨끗한 해결책이 아닌지를 강조한 문제에 마주 쳤습니다. 위에서 언급 한 것처럼 필드 객체는 장치의 구성 필드를 나타냅니다. 이러한 필드가 액세스되는 방식과는 별개입니다.
더 일반적인 용어 : 나의 숨겨진 내부 표현 인 은을 설명하지 않습니다.과 반드시 1 : 1 관계가있는 것은 관련이없는 것으로 을 설명합니다.
필드 액세스를 변경하려는 경우 문제가 될 수 있습니다. 예를 들어 이제 "오류시 다시 시도"액세스 동작을 제공하는 Field 데코레이터 클래스를 만들 수 없습니다. 데코레이터를 사용하는 코드는 실제 기본 필드와 관련이없는 자체 필드로 취급합니다.
이 아니라 원래 질문에 대한 대답 인이 아니라 내 가정이 잘못되었음을 알 수 있습니다. 자신의 내면 묘사가 사물 자체와 1 : 1의 관계를 가지고 있다는 것을 정말로 확신한다면,이 문제는 적용되지 않습니다.
엔티티의 모든 부분이 소비자가 필요하면 .. 그렇다. 그렇지 않은 경우 액세스를 어떻게 든 제한하는 것이 가장 좋습니다. 랩핑 엔티티가 있는지 여부 또는 특성/메소드의 액세스 수정 자 여부. –
클라이언트에 대해 이해할 수있는 객체의 부분 만 공개됩니다 (예 : 필드 이름 및 데이터 제한 (GUI에 유용)). 디바이스 프로토콜 세부 사항이 아닙니다. – Medo42