중위Coremander 데이터, 제1부분

GitHubhere에서 이 단계의 항목을 확인합니다.

핵심 데이터


내가 새로운 프로그램을 시작하려고 준비할 때 가장 먼저 해야 할 일 중 하나는 데이터 구조를 고려하는 것이다.나는 보통 응용 프로그램의 외관에 대해 모호한 생각을 가지고 있지만, 나에게 있어서, 이것은 응용 프로그램의 작업 방식보다 훨씬 중요하다.

Snippet of data structure notes I wrote in Bear


개인적으로 제 장점 중 하나는 인코딩을 시작하기 전에 서로 다른 대상 간의 관계를 곰곰이 생각하고 상상할 수 있다는 것입니다.그리고 모델 편집기에서, 코드에서, 심지어 텍스트 편집기에서만 실체를 정의하기 시작했을 때, 잠재적인 문제가 뚜렷해져서 조정할 수 있었다.

모델링 데이터


이것은 나에게 매우 중요하다. 나는 이 일을 잘 해야 한다.나는 그것을 생각하고, 다시 검토하고, 모델링하고, 다시 모델링하고, 코드를 작성하고, 다시 쓰는 데 많은 시간을 들일 것이다.데이터 모델은 응용 프로그램의 기초다.아마
  • 철저
  • 논리
  • 전망적 사고
  • 완료
  • ...그러나 너무 복잡하지 마라. 그것들이 멋있어 보이거나, 네가 나중에 그것을 원할지도 모른다고 해서 그것들을 포함시키려 하지 마라.

    I literally just made these four points up, but I like them, so I'll elaborate.




    철저하다


    만약 데이터 모델에 어려움이 있다면, 응용 프로그램에서 하고 싶은 모든 일과 그 대상과의 관계를 생각해 보세요.필요하면 명세서를 작성하세요.당신이 완성하고자 하는 동작과 대상의 속성 간의 관계를 생각하기 시작한다.무엇이 부동산입니까?무엇이 쓸데없는 것일 수 있습니까?
    위 그림의 모형 편집기에서 제 실체를 볼 수 있습니다.핵심 데이터에 익숙하지 않은 사람들에게 핵심 데이터 중의'실체'는 코드의 한 종류가 될 것이다.모델 편집기는 핵심 데이터의 제약에 따라 실체 (어쨌든 기본적으로) 가 NSManagedObject 의 하위 클래스로 신기하게 변환되는 것을 도와 줍니다. Xcode와 컴파일러는 이 하위 클래스를 이해할 수 있고 코드에서 사용할 수 있습니다.솔리드에는 객체 속성이 되는 속성이 있습니다.
    마찬가지로 핵심 데이터에 익숙하지 않으면 내 실체를 보고 뚜렷한 누락이 있다고 생각할 수도 있다.예를 들어, 우리는 대상이 만들어질 때의 시간 스탬프를 필요로 하지 않습니까?이 응용 프로그램은 실제로 그것을 필요로 하지 않는다. 원인은 두 가지가 있다.우선, 이것은 중요하지 않다.날짜별로 정렬되지 않습니다.반대로 정렬은 listOrder 속성으로 처리됩니다.그 다음에 클라우드 Kit는 잠시 후에 사용할 것입니다. 모든 CKRecord를 iCloud에 처음 저장할 때 자동으로 생성 시간 스탬프를 추가합니다. 따라서 최종적으로 생성 날짜가 필요하면 충분한 근사값이 될 것입니다.
    데이터베이스를 사용하는 데 익숙해지면, 또 다른 잃어버릴 수 있는 일은 ID 번호입니다.핵심 데이터는 배후에서 이 모든 것을 추적할 것이다.기본적으로 핵심 데이터는 SQLite를 사용하여 실제 데이터를 저장하지만 이 모든 것은 우리에게 추상적이다.클라우드 백엔드는 iCloud이기 때문에 CloudKit는 핵심 데이터를 처리하는 데 사용되기 때문에 ID번호를 통해 서버와 통신하는 것을 걱정할 필요가 없습니다.

    논리에 맞다


    내가 이렇게 많은 시간을 데이터 모델에 쏟아붓는 또 다른 이유는 내가 극복해야 할 편견과 가설이 있다는 것을 알고 있기 때문이다.코드에서 대상이 상호작용을 하는 것을 상상하는 데 시간이 걸리거나 (만약 이것이 당신에게 너무 '원' 이라면, 응용 프로그램이 완성된 후에 그것을 사용하는 것을 상상하는 데 시간이 걸린다.) 이 가설들이 풀리는 것을 보기 시작한다.
    당신의 속성은 정말 의미가 있습니까?이전 데이터가 새 입력으로 교체되면 이전 데이터를 보존해야 합니까?당신이 저장한 물건은 항상 계산하기 쉽습니까?어떤 내용을 저장해야 할지 계산, 계수 또는 추정할 수 있다고 생각합니까?
    때때로, 당신이 응용 프로그램을 구상할 때 간단해 보이는 일은, 당신이 실현을 생각할 때, 아주 빠르게 매우 복잡해질 수 있다.우리는 모두 간단함을 꿈꾼다. 특히 애플 생태계의 개발자들이다.그러나 간단하고 사용하기 쉬운 응용 프로그램의 특징은 데이터와 논리가 매우 복잡하다는 것이다.사용자에게 있어서 이 앱의 단순성은 개발자가 얼마나 많은 정력을 들여 이런 복잡성을 없애고자 하는지와 정비례한다.

    관계


    마지막으로, 당신이 정확한 물건을 저장했다고 확신하면, 그것들과 정확하게 연관되어 있는지 확인해야 한다.핵심 데이터에서 우리는 관계를 실체에 추가하기만 하면 이 점을 할 수 있다.당신의 관계 유형 (일대다) 이 정확하다는 것을 확인하기만 하면 됩니다.
    만약 네가 전체 데이터베이스를 설계하고 있다면, 데이터의 복잡도에 따라, 그것은 약간 복잡할 것이다.데이터를 어떻게 저장하는가뿐만 아니라 어떻게 꺼내는가도 고려해야 한다.당신의 독특한 장점을 이용하여 표를 작성하는 데 진정으로 뛰어나다. 그러면 가능한 한 복잡한 방식이 아니라 단도직입적으로 표를 작성할 수 있다.

    전망적 사고


    이 초기 단계에 나는 가능한 한 앞당겨 생각하여 미래 상황이 불가피하게 변화할 때 데이터 모델에 대한 영향이 가장 적다.한 가지 방법은 모델에서 String 유형을 사용하고 이를 Swift 코드에 비추는 것이다enum.
    다음 예는 다음과 같습니다.
    enum StepType: String, CaseIterable {
        case silence, text, mantra, audio, video
    }
    
    모델 편집기에서Step는 유형type의 속성String을 가지고 있다.상기enumString 유형의 rawValue 케이스를 채택했다.이것은 우리로 하여금 매우 멋진 세 가지 일을 할 수 있게 한다.
  • 핵심 데이터에 값을 문자열로 저장하기 쉽다
  • 스위프트 코드의 열거값을 활용하여 전환, 순환 등
  • 오류가 발생하기 쉬운 "magic strings"을 사용하지 마십시오. 컴파일러가 입력이 정확한지 확인하는 데 도움을 줄 수 없기 때문입니다.
  • 유일한 진정한 단점은 enums를 rawValues로 바꾸는 것은 매우 번거롭고 긴 코드 줄이 생길 수 있다는 것이다.
    그렇다면 이것은 어떻게 우리가 전망적인 사고를 유지하는 데 도움을 줍니까?다른 대소문자를 StepType 매거진에 추가하는 것은 매우 쉽습니다. 이것은 상응하는 문자열을 Step 실체의 type 속성의 가능한 값으로 자동으로 추가합니다.우리는 우리의 모델을 바꿀 필요가 없다. 우리는 새로운 기능을 실현하기만 하면 된다.

    완전했어


    현재 나는 나의 이상에 도달하지 못한 분야가 하나 있다.나는 내 모델이 내가 실현하고자 하는 모든 기능을 포함하지 않는다는 것을 이미 알고 있다.문제는 이러한 기능을 어떻게 실현하고 무엇을 저장해야 하는지 배워야 한다는 것이다.나는 나중에 프로그램 전체를 멈추는 것이 아니라 필요에 따라 새로운 실체를 추가할 것이다.

    계속


    1부는 여기까지!2부에서는 핵심 데이터 유형과 Swift 유형 사이의 데이터 변환을 돕는 유용하고 흔한 기능을 추가하기 위해 모델의 클래스를 확장하는 것을 논의할 것이다.
    지금 니 생각을 알려줘.만약 네가 이번 토론이 유용하다고 생각한다면, 나는 매우 듣고 싶다.만약 네가 다른 생각을 가지고 있다면, 나는 항상 기꺼이 자신의 생각을 배우고 재평가할 것이다.

    좋은 웹페이지 즐겨찾기