Come garantire questo vincolo al momento della compilazione?

0

Ho un vincolo / invariante interessante e mi piacerebbe sentire le opinioni della gente su come mantenerlo. Grande bonus se può essere assicurato al momento della compilazione ...

Ho i seguenti tipi e l'invariante concettuale seguente ... Se l'id di un attributo è uguale a un id di attributeValue, allora devono avere tipi corrispondenti. Come esprimeresti questo invariante e assicureresti che sia vero nel codice? (Il codice è Swift, ma la domanda è generica.Per quelli che non conoscono Swift, questi sono tutti tipi di valori immutabili. Possono essere utilizzati come interi o stringhe immutabili in altre lingue.)

struct Attribute {
    let attributeID: Int
    let name: String
    let display: Bool
    let type: AttributeType
}

enum AttributeType {
    case Text
    case SingleList([AttributeChoice])
    case MultiList([AttributeChoice])
    case Date
    case Time
    case DateTime
    case Image
    case Flag
    case Count
}

struct AttributeValue {
    let attributeID: Int
    let value: AttributeValueType
}

enum AttributeValueType {
    case Text(String)
    case SingleList(AttributeChoice)
    case MultiList([AttributeChoice])
    case Date(NSDate)
    case Time(NSDate)
    case DateTime(NSDate)
    case Image(UIImage)
    case Flag(Bool)
    case Count(Int)
}

struct AttributeChoice {
    let serverID: Int
    let name: String
}

Mentre sto scrivendo questa domanda, stavo pensando che forse la classe Attribute dovrebbe gestire la creazione di AttributeValues in qualche modo, altre idee?

    
posta Daniel T. 15.07.2015 - 15:12
fonte

0 risposte

Leggi altre domande sui tag