모바일 앱용 .net API 백엔드가 있는데
빈 GUID 는 다음을 반환해야합니다.
- 00000000-0000-0000-0000-000000000000
- 또는 null (반환 유형이 nullable Guid 유형 (Guid?)를 사용함)
첫 번째 인 경우 모바일 개발자는이를위한 구문 분석 메서드를 생성해야하며 일반적인 일반 null 검사 기능을 사용하지 않아야합니다.
C #에서는 간단하게
if (guid == Guid.Empty)
하지만 iOS 개발자는 구문 분석 방법을 만드는 것에 대해 이야기합니다 (내 생각에는 빌드하지 않습니다).
하지만 저는 무엇이 “모범 사례”로 간주되는지 또는 기본 앱이 비어있는 / null Guid를 처리하는 방법에 대한 토론을 찾을 수 없습니다.
알고 있습니다. 나는 무엇을 좋아하지만 어떻게해야한다고 생각합니까?
댓글
h3>
- 먼저, ' 그가 '하지 않는 경우 빈 GUID입니까? 또한 비어 있지 않지만 비어 있지 않은 GUID에 대한 구문 분석 방법이 필요한 이유는 무엇입니까? ' 그냥 " 00000000-0000-0000-0000-000000000000 ?
- 빈 Guid는 존재하지 않는 Guid와 다릅니다. .Net에서 비어있는 규칙은 00 …. 00이지만 다른 플랫폼에서 사용하는 ' 공용 API에이 규칙을 유출하고 싶지 않을 수 있습니다. 무엇이 비어 있고 ' 무엇이 비어 있는지 '가 무엇을 정의하려고 시도하는 대신, Guid가 있는지 여부를 정의해야합니다. , 모든 플랫폼 (웹, IOS, Android 등)에서 쉽게 사용할 수있는 규칙을 사용하고 프로토콜로 유지하세요.
- @Machado 잘 .net 규칙인가요? " 특별한 경우 인 " nil " UUID는 UUID입니다. " en.wikipedia.org/wiki/Universally_unique_identifier#Standards
- .Net에는 Guid 만있는 것 같습니다. .Empty 1.0 릴리스에는 제네릭이없고 Nullable < T >가 없기 때문에 Empty는 null을 의미하는 스탠드가되었습니다. Guid는 값 유형이지만 실제로 유효한 guid 값은 아닙니다. 내가 오늘 작업하는 코드베이스에서 어떤 이유로 도처에 Guid? s가 있으며 Empty와 null은 의미 상 똑같은 것을 의미합니다. 꽤 성가신 일이고 ' Guid '를 nullable로 만들지 않았으므로 ' 두 경우를 계속 확인할 필요는 없지만 ' 이제 ' 이제 Guid를 제거 할 방법이 있기 때문입니다. .Empty.
- ' " 비어있는 " 상수 및 null : 하나는 NRE를 발생시키고 다른 하나는 ' t를 발생시킵니다. 둘 다 확인하고 처리해야하므로 독을 선택하십시오. 빨리 실패하거나 조용히 실패하고 싶으세요?
답변
“빈”GUID는 여전히 유효한 GUID입니다. , 그래서 파싱은 추가 로직이 필요하지 않습니다.
질문은 왜 그것을 사용하는 것입니까? 특정 GUID에 특별한 의미를 부여하여 마술처럼 만드는 것은 나에게 실수 인 것 같습니다. 숫자입니다.
이것은 “내가 int id를 반환하겠다고 말하는 것과 비슷하지만 음수이면 오류 코드입니다.하지 마십시오!
.. 이유는 함수를 호출 할 때마다 사용자가 음의 반환 값을 확인하는 것을 기억해야하기 때문입니다. 잊어 버리면 재난이 발생합니다.
마찬가지로 guid.empty에 특별한 의미를 할당하면 API를 호출하는 모든 사람이 호출 할 때마다 특별한 검사를 작성해야합니다.
It ” null을 반환하거나 (해당되는 경우) 예외를 throw하는 것이 좋습니다 (REST 서비스를 가정하고 HTTP 오류 코드를 통해).
코멘트
- 이유 언젠가 경고 코드 또는 오류 504.2가 발생하여 음의 정수 또는 음의 ID로 압축 할 수 없으며 전체 시스템이 무너져 내릴 것입니다.
- guid.empty (다른 특정 GUID와 마찬가지로)는 생성되지 않습니다.
- OP didn ' t 특별한 의미를 할당하지 않습니다. .Net 팀은 00..00으로 변경했습니다. 문제는이 추상화 유출을 허용할지 여부입니다.
- @RubberDuck : nil UUID는 실제로 UUID를 설명하는 RFC의 일부이므로 추상화는 이미 " 누수 ". ref tools.ietf.org/html/rfc4122#section-4.1.7
- @Newtopian이 ' RFC의 일부인 경우 API 응답으로 반환하는 것이 완전히 허용됩니다. 클라이언트 '의 언어 / 라이브러리가 ' 상수를 정의하지 않으면 '는 간단하게 만들고 적절하게 처리 할 수 있습니다.
답변
저는 iOS 개발자이며 왜 당신의 남자가 “파싱 방법”을 만들어야한다고 생각하는지 모르겠습니다. UUID(uuidString: valueFromServer)
만 있으면됩니다. 다음과 같이 간단하게 마법 UUID를 만들 수 있습니다.
extension UUID { static var zero: UUID { return UUID(uuidString: "00000000-0000-0000-0000-000000000000")! } }
그런 다음 모든 GUID를이 매직 GUID와 비교할 수 있습니다.
즉, 서버에서 제공되는 모든 값에 대해 프런트 엔드 개발자가 먼저 값이 있는지 확인한 다음 올바른 형식인지 확인합니다. 매직 값을 반환하는 경우 또한 확인해야합니다. 올바르게 입력 된 값은 마법입니다. 마법의 가치를 포함함으로써 그에게 if 확인을 추가하도록 강요하는 것입니다.
프론트 엔드 개발자로서 저는 질문해야합니다. 어떤 이유로 앱의 복잡성을 높이도록 강요하고 있습니까?
프런트 엔드가 누락 된 GUID를 매직 GUID와 다르게 처리해야한다는 주장을 할 수 있다면 반환 할 인수가있는 것입니다. 그렇지 않으면 프런트 엔드 앱에 불필요한 복잡성이 추가됩니다.
(@ RubberDuck의 의견에 대한 응답으로 추가됨)
여기에 문제가 있습니다. JSON 표준에는 null 값을 처리하는 한 가지 방법이 있으며 GUID 표준에는 null 값을 처리하는 다른 방법이 있습니다. JSON을 통해 GUID를 전송하기 때문에 후자는 중요한 문제입니다 (GUID가 JSON으로 래핑되기 때문). 이는 준수해야하는 표준입니다. . 실제로 0으로 가득 찬 GUID를 보내서 null GUID를 보내기로 결정한 경우에도 프런트 엔드는 여전히 JSON null을 확인해야합니다.
프런트 엔드가 두 가지 다른 null 개념을 처리하도록 강요하지 마십시오.
댓글
- 이유 '가 RFC의 일부입니까? tools.ietf.org/html/rfc4122#section-4.1.7
- 우연한 복잡성의 기쁨입니다. 일부 RFC위원회가 내 시스템에서 의미가없는 선택을했기 때문에 내 앱을 더 복잡하게 만들어야합니다.
- 아니요, 앱을 더 복잡하게 만듭니다. 잘 정의 된 표준을 수용하여 시스템이 더욱 유연 해집니다. 또한 libs가 기본적으로 표준을 지원하지 않으면 ' 악취를 일으키고 업스트림 수정을 요청합니다.
- 또는 표준이 ' 멍청하기 때문에 변경됩니다. 매직 값은 최악입니다. 다음으로 정수 값 0이 실제로 NULL이라고 말하는 RFC는 ?
답변
원하는 일을하십시오 (MacOS 및 iOS에 관한 한).
iOS 또는 MacOS가 r은 JSON 데이터에 문자열이 포함되어 있는지 확인하고이를 GUID 개체로 변환하거나 실패를 나타내는 구문 분석 메서드를 작성합니다. 존재하지 않는 GUID를 나타 내기 위해 JSON null을 보내면 JSON 데이터에 NSNull () 값이 포함되어 있는지도 확인합니다. 그것은 개발자가 완전히 무능하지 않다고 가정합니다. 또한 기본 설정에 따라 선택적 GUID를 사용하고 nil 또는 비 선택적 GUID를 확인하고 GUID가 모두 0인지 확인하는 속성을 갖습니다. 그것은 당신이하는 일과는 완전히 독립적입니다.
정말로 당신은 당신이 좋아하는 것을 할 수 있습니다 (일관되게 유지하십시오). 완전히 무능하지 않은 개발자는 괜찮을 것입니다. “파싱 방법 만들기”는 대부분의 iOS 개발자로서 이것은 논의 할 가치가 없습니다. 보내는 것을 문서화하십시오. 논의하는 것보다 빨리 구문 분석 방법을 만들겠습니다.
댓글
- 예, 동의합니다. 수행해야 할 작업을 제어합니다. 그리고 iOS 개발자가 순식간에 파서를 만들 것임을 압니다.하지만 이것이 정답인가요? 더 확실한 답변을 바라고 있었는데 ..하지만 ´ t one. 나는 ´ 이것을 잠시 담그고 나서 더 좋은 답은 없을 것입니다.
Answer
.NET에서 Guid는 값 유형이므로 null 값을 할당 할 수 없습니다.
값 유형에 null을 저장해야하는 경우 일반적인 해결책은 Nullable을 사용하거나 Guid? int? long? 등과 같은 구문을 사용하는 것입니다.
이것은 또한 표준 serializer와 함께 작동하므로 값이 누락되거나 리터럴이 있습니다. null 값.
댓글
- Esben,이 답변은 OP를 다루지 않습니다. '의 질문입니다. 답변하기 전에 자세히 살펴 보시기 바랍니다.