Modifica di modifica maggiore o minore durante l'implementazione di un'interfaccia

2

Sto usando versioning semantico 2.0.0. Nella mia situazione ho un'implementazione concreta di alcune interfacce A in una biblioteca. E ho l'interfaccia che viene implementata (chiamala B ) in un'altra libreria.

Capisco che se dovessi aggiungere nuovi metodi all'interfaccia B allora quella sarebbe considerata una modifica importante per B perché qualsiasi libreria che implementa l'interfaccia (ad esempio come A ) non verrebbe compilato fino all'implementazione di qualsiasi metodo aggiunto. Il mio ragionamento per questo è considerato un cambiamento importante perché ora hai reso un'API incompatibile con B (in base al versioning semantico). Penso di capire chiaramente questo concetto, ma correggimi se sbaglio.

Ecco la mia domanda, e la parte che non capisco ... Cosa succede a A , il concreto che sta effettivamente implementando l'interfaccia? Ottiene una modifica del numero di revisione maggiore o minore ? Immagino che da un punto di vista si potrebbe dire che ottiene una modifica di revisione minore perché l'aggiunta di un metodo pubblico non lo rende incompatibile come ad esempio ... se si dovesse cambiare il nome di un metodo ... Suppongo che potresti anche sostenere che otterrebbe un importante cambiamento perché ha bisogno di implementare l'interfaccia per funzionare. Uno di questi ragionamenti è corretto o nessuno dei due?

    
posta Snoop 03.02.2017 - 15:03
fonte

1 risposta

1

OK. così

hai

public class A : IA {}

e

public interface IA {}

in diverse librerie

E ho

public class MyA : A {}

per il quale sto consumando il tuo IA.dll

Se aggiungi un metodo IA.GetAs() , allora sì è una modifica importante perché A non verrà compilato fino a quando non aggiungerai un'implementazione dell'interfaccia.

Sembra che MyA si compili ancora quando aggiorno ad entrambi i file A.dll v2 e IA.dll v2

Tuttavia, cosa succede se ho già MyA.GetAs() ? È possibile che il mio codice finisca per chiamare A.GetAs() anziché MyA.GetAs() . Quindi penso che dovresti aggiornare il numero di versione principale.

In generale, prenderemo in considerazione qualsiasi modifica ai metodi / proprietà esposti di un oggetto per essere un cambiamento importante.

    
risposta data 03.02.2017 - 16:18
fonte

Leggi altre domande sui tag