최근에 특정 논리를 처리하고 특정 수명주기가있는 직렬화 가능 객체를 작성했습니다. 이 함수가 제대로 작동하려면 적절한 생성자로 인스턴스화해야하며 필수 인수가 필요합니다. 그러나 직렬화를 위해 공용 기본 생성자를 추가해야합니다.[Obsolete] 속성을 사용하여 개발자에게 API의 일부를 사용하지 않도록 지시하는 것이 바람직합니까?
객체는 Google API에서 공개적으로 사용할 수 있으며 타사 개발자는이를 인스턴스화하고 사용할 수 있어야합니다. 이 객체를 올바르게 조작하는 방법에 대한 적절한 문서가있을지라도, 누군가가 잘못된 생성자를 사용하고 유혹을 느끼지 않을 수도 있습니다.
타사 개발자가 코드를 작성하는 동안 약간의 지침을 적용 할 수있는 좋은 방법을 모색 중입니다. Obsolete
속성이 나왔습니다. 직렬화 생성자에 적절한 주석을 메시지로 주석을 추가 할 수있었습니다. 그러면 메시지가 출력 경고에 나타나고 개발자가 올바른 코드 행으로 이동합니다. 또한 생성자 사용은 Visual Studio 및 사용 된 모든 코드 검사 추가 기능에서 적절히 강조 표시됩니다.
이 접근법에서 나를 귀찮게하는 것은 Obsolete
속성의 목적이 아주 다른 것입니다. 의미있는 것은 데코 레이팅 된 항목이 더 이상 사용되지 않으며 이후 버전에서 제거 될 것임을 의미합니다. 직렬화 생성자 시나리오에서 이것은 잘못되었으며이 속성의 사용법과 의미간에 불일치가있을 것입니다. 일부 개발 부서에서 사용할 수있는 "경고를 오류로 처리"하는 옵션은 말할 것도 없습니다 ...
그래서이 속성의 사용에는 허용되는 관행입니까? 동일한 효과를 얻으려는 다른 법적 및 보편적 인 방법이 있습니까 (보편적으로 제 3 자 코드 검사 애드온 등에 의존하지 않음 - 코드를 사용하는 사람과 해당 설정을 제어하지 않음)? (아직도 나에게 유용하다) 아래의 대답에 코멘트에 관해서
, 나는 내가 상속 클래스에 보호 기본 생성자를 사용하고 있음을 명확히해야합니다. 생성자는 XML 직렬화를 지원하지만 비즈니스 논리에서 클래스를 초기화하는 데 사용해서는 안됩니다. 상속 클래스는 다른 기본 생성자 중 일부를 호출해야하며 상속 된 클래스를 작성하는 개발자는이를 알아야합니다. 여전히이 코드에서 파생 된 개발자는 필요할 경우 상속 된 클래스에 대해 XML 직렬화를 사용 가능하게하는 방법을 가져야합니다.
[EditorBrowsable (EditorBrowsableState.Never)]을 사용하면 개발자가 intellisense에서 생성자를 숨겨 개발자가 제안을 받아 문서를 확인하지 않고 실수로 사용하지 못하게 할 수 있습니다. – fsimonazzi
@fsimonazzi, 유용한 정보를 제공해 주셔서 감사합니다. 같은 방식으로 아무도 사용자 코드에 의해 사용되지 않는 멤버가 액세스되는 것을 막을 수 없으므로 귀하의 제안은 매우 유효하고 더 많은 장소에서 이루어집니다. –