La convenzione sulla configurazione "Conoscenza nel mondo" o "Conoscenza nella tua testa"?

4

Nel lavoro seminale di Don Norman " Il design delle cose quotidiane ", l'autore ha coniato le frasi e spiega il differenza tra "Conoscenza nel mondo" e "Conoscenza nella tua testa"; un esempio di questo è un pannello di luci a più interruttori che può incorporare "Conoscenza nel mondo" per essere un modello / mappa della stanza, con gli interruttori nella posizione corrispondente, o "Conoscenza nella tua testa" (che è come sono quasi sempre progettati / implementati) quando devi memorizzare quale interruttore attiva o disattiva la luce.

Potresti pensare a "La conoscenza nel mondo" come qualcosa che puoi dedurre usando l'osservazione e la logica, e "La conoscenza nella tua testa" come qualcosa che deve essere memorizzato.

Nel mondo di DI, e "Auto-Registration", che si basa sul modello "Convention Over Configuration", l'utilizzo di questo processo è un caso del programmatore che usa "Knowledge in the World" (la funzionalità è prevista, come fornisce il framework) o è "Knowledge In Your Head" (il programmatore deve essere consapevole e imparare la convenzione).

Sto prendendo in considerazione la visione approssimativa del traffico che Convention Over Configuration è un mondo intermedio tra i due.

Mi sbaglio?

    
posta B. Clay Shannon 10.01.2014 - 20:05
fonte

3 risposte

2

Convention Over Configuration è praticamente per definizione "Knowledge in the World" - la convenzione è sempre pensata per essere così "ovvia" da non dover imparare molto: cose come avere gli URL mappati automaticamente a classi di controller e DB tabelle per modellare le classi. Lo stesso vale per la registrazione automatica DI: gli oggetti vengono automaticamente istanziati e iniettati in altri in base alle convenzioni di denominazione. "Funziona".

Naturalmente, il problema è che in pratica non è sempre (e quasi mai in sistemi sufficientemente grandi) così semplice. Hai esigenze particolari e casi limite non coperti dalle convenzioni e smette di funzionare. Il problema quindi è che tutta questa "magia" da cui si suppone dipenda è opaca per te e fa affidamento su meccanismi che sono piuttosto complessi da soli. E devi investire molto tempo per imparare come funziona in modo che tu possa farlo funzionare come ti serve e sistemarlo quando si rompe. E poi è diventato "La conoscenza nella tua testa".

Ma in un sistema ben progettato e correttamente utilizzato, questo dovrebbe essere abbastanza raro che valga ancora la pena.

    
risposta data 10.01.2014 - 20:17
fonte
1

Sebbene Convention over Configuration sia supposto che sia "Knowledge in the World", invariabilmente non lo è.

public class MyController(IMyService service)...

public class DefaultService : IMyService...

public class ASpecialService: IMyService...

Quale servizio è utilizzato?

    
risposta data 04.04.2016 - 18:03
fonte
0

Come acquisisci questa conoscenza?

"Conoscenza nel mondo": principalmente per esperienza e convenzioni. Nel tuo esempio di cambio, sai già cos'è un piano e come mapparlo alla stanza reale.

"Conoscenza nella tua testa": principalmente per sperimentazione - nell'esempio di cambio, li provi.

Da quella prospettiva, la convenzione sulla configurazione è sicuramente "conoscenza nel mondo".

(Si noti che mentre la maggior parte degli switch di casa finiscono con la "conoscenza nella propria testa", rispettano comunque alcune convenzioni "conoscenze nel mondo" come essere - generalmente - nella stessa stanza delle luci e - se il proprio elettricista è un qualsiasi buono - approssimativamente ordinato come le luci in una configurazione multi-switch)

    
risposta data 10.01.2014 - 20:22
fonte