Quale terminologia è associata alla manutenibilità irregolare?

2

Uno sviluppatore ha il compito di scrivere un servizio in grado di scorrere un certo numero di record e inviare notifiche per ciascuno di essi. Il tipo di notifica potrebbe essere diverso per record, quindi puoi immaginare una logica come questa:

switch (record.DeliveryPreference)
{
    case "email": SendEmail(record); break;
    case "sms": SendSms(record); break;
}

Lo sviluppatore decide che un giorno potrebbero esserci altri metodi di consegna, quindi vuole eliminare il caso / switch e vuole invece essere in grado di aggiungere ulteriori metodi di consegna solo tramite configurazione:

<DeliveryMethod type="Company.Channels.Plugins.Sms.SmsClient, Company.Channels.Plugins.Sms.Library" />
<DeliveryMethod type="Company.Channels.Plugins.Email.EmailClient, Company.Channels.Plugins.Email.Library" />

... e quindi utilizzare i metadati di tipo (a.k.a. Reflection) per rilevare nuovi metodi di consegna e utilizzarli automaticamente.

Considero questo un problema, chiamato in modo non corretto "manutenzione irregolare", perché la possibilità di aggiungere un nuovo DeliveryMethod tramite la configurazione è sopra progettata.

Perché è sovrastampato? Bene, se la compagnia introdurrà un nuovo metodo di consegna, questo andrà a un grande progetto. Dovresti ottenere finanziamenti, procurarti un provider, stabilire connettività, aprire proxy e firewall e scrivere il codice base che utilizza la nuova connessione. Non c'è modo che sia mai qualcosa di semplice e veloce. Quindi qui uno sviluppatore ha aggiunto tutta questa complessità in modo da poter risparmiare 30 minuti di codifica da un progetto di 500 ore, il che sembra poco vantaggioso.

Nel frattempo, la complessità aggiuntiva potrebbe essere dannosa , per le solite ragioni la complessità inutile è dannosa. Ma in particolare, una ragione spicca per me. Invece di utilizzare effettivamente la configurazione come luogo in cui gli sviluppatori possono facilmente specificare i parametri di sistema, è diventato un documento che deve contenere una serie di stringhe magiche affinché il sistema possa funzionare. Tutti i file di configurazione saranno sempre uguali, e se c'è una lettera fuori posto, la cosa esploderà. Dal punto di vista della teoria delle informazioni, si potrebbe dire che il file di configurazione ha aumentato la percentuale di equivoco , il che significa che il contenuto delle informazioni è andato giù.

Un diverso tipo di analogia visualizzerebbe un ponte composto da assi dove ogni altra tavola è rigida o flessibile. Il risultato è un ponte che non è né rigido né flessibile, ma in generale più debole.

Potrei continuare con esempi e pro e contro e così via, ma ciò sarebbe basato sull'opinione pubblica e non è il punto di questa domanda. Sto cercando terminologia o principi di ingegneria che si occupino della nozione di "flessibilità inutile" o di manutenibilità irregolare.

    
posta John Wu 05.09.2018 - 02:48
fonte

1 risposta

1

Non siamo nella testa dello sviluppatore quando ce l'ha fatta però:

  • Avrebbe potuto solo pensare che ne sarebbe valsa la pena, perché non ci voleva un sacco di tempo in più per fare
  • Potrebbe anche essere necessario un modo per disabilitare l'invio di SMS / email durante il test fornendo un'implementazione fittizia.

Tuttavia, vedo due problemi diversi dal tuo punto di vista: la configurazione esterna e il modo in cui è stata implementata.

Infine, quando lo sviluppatore ha pensato a come avrebbe fatto, potrebbe non aver avuto il tempo per un'analisi adeguata, quindi ha scelto il modo più naturale per farlo.

E come chiamarlo? Beh, dipende dallo stato globale dell'applicazione.

Se guardo e considero solo l'ipotesi che ho detto prima, non chiamerò questa overengineering né una piattaforma interiore. L'unica cosa che mi ha infastidito è il fatto che ha usato la riflessione invece di usare strumenti migliori per questo tipo di cose.

Come tale, qualunque cosa vogliamo nominare dipenderà dal nostro modo di vedere al riguardo, e ovviamente questa è solo un'opinione.

    
risposta data 05.09.2018 - 11:46
fonte