Gli oggetti con proprietà diverse (non comportamento) hanno tipi diversi?

-2

Vedo un sacco di classi che assomigliano a:

class Student extends Model {
    public string major;
    public string minor;
}

class Employee extends Model {
    public string department;
    public string building;
}

Questo tipo di classi sono principalmente utilizzate per contenere i dati. La mia domanda è, dovrebbero esistere questi alias per la classe Model solo perché hanno proprietà diverse? Al massimo, le differenze tra loro sono accessorie. Questi tipi di classi sono buoni o cattivi? Perché non vedo più di:

student = Model::fromArray(['major' => 'a', 'minor' => 'i']);
employee = Model::fromArray(['department' => 'd', 'building' => 'b']);

Questo è più sullo stile piuttosto che sull'applicazione specifica. Vedo che quando si parla di presentazione / visualizzazione, le persone non si preoccupano molto dei tipi, molti dati vengono passati come array al sottosistema di template e non si creano modelli di presentazione.

Anche gli oggetti Data Transfer non hanno comportamenti e ottengo una risposta da questo articolo LocalDTO sul perché DTO non dovrebbe essere usato localmente (solo per il controllo del tipo?). Sto cercando un caso più generale su quando utilizzare (o meno) questi comportamenti meno classi.

    
posta imel96 11.12.2015 - 07:49
fonte

1 risposta

4

Sì, dovrebbero esistere e sono una buona cosa.

Il valore dei tipi fornisce informazioni su quali valori di quel tipo contengono e in che modo è possibile accedervi. Se non hai definito le classi per Dipendente e Studente, non avresti queste informazioni presenti nel tipo e quindi fare affidamento sul programmatore non solo per tenere traccia di quando stanno lavorando su un Dipendente o uno Studente, ma anche per tenere traccia di quali proprietà esistono e quali sono i loro tipi. L'onere di convalidare l'uso corretto è posto quindi sul programmatore, non sulla lingua e sul suo compilatore.

Non hai necessariamente bisogno di queste informazioni. Dopo tutto, il programmatore può semplicemente provare a tenerlo in testa o cercarlo da qualche altra parte nel codice. Avere semplicemente rende molto più semplice mantenere un codebase, perché le informazioni aggiuntive sul tipo fornite al codice che funziona con valori di quel tipo aiutano il programmatore a garantire la correttezza lasciando che il compilatore, l'interprete o il linter eseguano parte del lavoro.

    
risposta data 11.12.2015 - 09:03
fonte

Leggi altre domande sui tag